我这个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 就输出正确。
这是什么问题??? 求大神解答啊,

int的位数太少了,你把int换成long long,如果你的是vc 6.0,你就把int换成__int64,这样就可以了
#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位

参考技术A 如果你用int定义一个变量进行计算,那么他的值只能在-32728~32767之间,否则运算结果就不对,可以换成long试试 参考技术B 这么大的数已经把int爆了追问

哈哈,才疏学浅,没办法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时,求出答案。谢谢

c语言:如果有一大堆数,怎么找出其中出现次数最多的那个

逆序数还原c语言 输入数组 2 0 1 0 0 输出原序数 3 1 4 2 5

怎么用c语言或c++写这个程序

c语言设计猜数字游戏