我这个c语言程序 怎么输入过大的数就出错??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我这个c语言程序 怎么输入过大的数就出错??相关的知识,希望对你有一定的参考价值。
题目是输入一长整数,从高位开始逐位分割并输出。如输入123456 输出1,2,3,4,5,6。
我是这样写的#include<stdio.h>
#include<math.h>
int main(void)
int num,i,a,n,b;
i=0;
printf("Enter num:\n");
scanf("%d",&num);
n=num;
while(num!=0)
num=num/10;
i=i+1;
for(b=i;b>=1;b--)
a=n/pow(10,(b-1));
n=(int)n%(int)pow(10,(b-1));
printf("%d,",a);
return 0;
如果我输入123456789111213141516 就输出8,7,5,3,1,0,6,0,4。 但我输入123456789 就输出正确。
这是什么问题??? 求大神解答啊,
#include<math.h>
int main(void)
long long num,i,a,n,b;
i=0;
printf("Enter num:\n");
scanf("%lld",&num);
n=num;
while(num!=0)
num=num/10;
i=i+1;
for(b=i;b>=1;b--)
a=n/pow(10,(b-1));
n=(long long)n%(long long)pow(10,(b-1));
printf("%lld,",a);
return 0;
其实完全可以不用long long,直接用char
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
char str[1000];
scanf("%s",str);
for (int i=0;i<strlen(str);i++)
printf("%c ",str[i]);
return 0;
追问
我试试__int64
追答__int64后,输入方式就改变了,你直接用我给你的第二个程序就可以了
追问用第一个是这个错误
'long' followed by 'long' is illegal
warning C4244: '=' : conversion from 'double' to 'long', possible loss of data
error C2632: 'long' followed by 'long' is illegal
第二个 我们还没学。。没怎么看懂0.0
那是因为VC 6.0上没有long long,你改成__int 64
它可以达到18位数,int一般知道8位
哈哈,才疏学浅,没办法0.0
追答改成long long
或者用字符串把……
任意输入n个数,求第k大的数?用C语言,写出完整代码。
#include<stdio.h>int main()
int a[10000];
int n,temp,i,k,j;
printf("请输入你要输入的数的个数n:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
printf("a[%d]=",i);
scanf("%d",&a[i]);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[j]<a[i])
temp=a[j];
a[j]=a[i];
a[i]=temp;
printf("请输入你要的到第几小/大的数K:\n");
scanf("%d",&k);
printf("第%d大的数为%d\n",k,a[k-1]);
printf("第%d小的数为%d\n",k,a[n-k]);
return 0;
参考技术A
#include "iostream"
#include "stdlib.h"
using namespace std;
int random_partion(int *p, int n)
int idx=rand()%n;
swap(p[idx], p[n-1]);
int i=-1; //i????????p[n-1]??????
int j=0; //j??????
for(j=0; j<n; j++)
//???p[n-1]?????????
if(p[j]<p[n-1])
swap(p[++i], p[j]);
swap(p[++i], p[n-1]);
return i;
int getMaxK(int *p, int n, int k)
int mid;
if(k<=0)
return -1;
if(n<k)
return -1;
mid=random_partion(p, n); //??????????
if(mid == n-k) //??mid==n-k,??????,????k???
return p[mid];
else if(mid<n-k)
return getMaxK(p+mid+1, n-mid-1, k); //??mid<n-k,???k????????,??????k??
else
return getMaxK(p, mid, k-(n-mid)); //??mid>n-k,???k????????,?????????k-(n-mid)???
int main(void)
int num,a[] = 12012, 3, 945, 965, 66, 232, 65, 7, 8, 898, 56, 878, 170, 13, 5;
num=getMaxK(a, 15, 4);
int i;
for(i=0;i<15;i++)
printf("%7d",a[i]);
puts("\\n");
printf("%d\\n",num);
system("pause");
return 0;
以上是关于我这个c语言程序 怎么输入过大的数就出错??的主要内容,如果未能解决你的问题,请参考以下文章
C++ 输入一组数组 找出这个数组中第2大的数 这个函数 怎么写
用C语言编计算并输出k以内最大的10个能被13或17整除的自然数之和。当从键盘输入500时,求出答案。谢谢