永发信息网

c语言中,我定义了一个double类型的数,因为这个可能会比较大,超过int和long long的

答案:2  悬赏:10  手机版
解决时间 2021-03-21 18:39
  • 提问者网友:不爱我么
  • 2021-03-21 14:17
c语言中,我定义了一个double类型的数,因为这个可能会比较大,超过int和long long的
最佳答案
  • 五星知识达人网友:孤独的牧羊人
  • 2021-03-21 15:26
对于超长整数求解,一般使用字符串或者数组的形式。

如果能给出程序需求的更多细节,或者举个例子。
可以告诉你怎么写这个代码。

对于,你的问题我有一个疑问。
输入是超大的整数,为什么要给到一个double类型的变量里面呢?追问这个程序首先是输入一个自然数,然后要求把各个位数上的数加起来,然后每一位用拼音输出,自然数要求10的100次方范围内都可以。只要能求出各个位数上的数字的和后边就会写了。我想这么长的数字int和long long都不行,于是就选择了double,但是又不会取余。。你的意思是我写成类似于数组的形式?追答“然后每一位用拼音输出” 这个是打错了么? “拼音输出”不是很明白是什么意思。


就是要帮你写出,如何求出一个大数的各个位和。然后,后面的你自己可以写出来。


这里还要说一下,double是没有办法求余数的,因为余数是在整数级别才有的东西。
浮点数什么的,那都是余数往后衍生出来的。


先分析:
1.确定范围:0~10^100
也就是说,各位相加的最小值是0,最大值是900(100个9相加),所以,用int类型就完全能接收。
2.输入参数形式
①采用scanf函数的形式
②通过给可执行文件参数的形式 (这种形式需要你知道怎么向编译好的程序传递参数)
(这里每种形式对应不同的代码)


当你需要使用这些位相加的数时,可以修改函数返回类型,将其以返回值的方式返回。
//#define _CRT_SECURE_NO_WARNINGS
#include
#include

char NUM[1000];

void argu_type(char *num){
int sum = 0, i;

for (i = 0; num[i] != ''; i++);
printf("这个数有 %d 位。
 ", i);

for (i = 0; num[i] != ''; i++){
sum += num[i] - '0';
}
printf("%s get result is %d.
", __FUNCTION__, sum);
}

void scanf_type(void){
int sum = 0, i;
scanf("%s", NUM);

for (i = 0; NUM[i] != ''; i++);
printf("这个数有 %d 位。
 ", i);

for (i = 0; NUM[i] != ''; i++){
sum += NUM[i] - '0';
}
printf("%s get result is %d.
", __FUNCTION__, sum);
}
int main(int argc, char *argv[])
{
argu_type(argv[1]); // 参入形式①
scanf_type(); // 参数形式②




如果求余部分有问题,请完善追问描述。
追问实在是太谢谢你了,可是我还是不太懂你的意思,我输入的那个数是采用类似于数组方式的一个空间一个数吗?用putchar可以一个数字一个数字的输入吗?而不是字符。追答我输入的那个数是采用类似于数组方式的一个空间一个数吗?

可以这样理解,我这里使用的是字符数组。

用putchar可以一个数字一个数字的输入吗?

理论上来说,这个没有问题。
但实际上,你没法确定你的下一次输入得数位数是多少,所以采用putchar很不方便,多了程序停滞不运行,少了又获取不到正确的值。所以,这里不推荐使用。
除非你能确定你下一次输入数字的位数。

刚才因为字数超标,进行了多次修改,再刷新一下应该能看到我最后一次修改的结果。

补充:
还有,你在终端的输入本来就是字符型的。是scanf函数根据你需要的类型,将其进行了转化而已。所以在这里,数字和字符是没有本质区别的。追问太谢谢你了,回答的这么详细。(^_^)
全部回答
  • 1楼网友:怀裏藏嬌
  • 2021-03-21 16:47
强制类型转换就可以了!追问强制类型转换会丢失数据。我会用到这个double类型的数(其实是个整数),中的每一位上的数,相加。追答这是大数问题,那就开个数组试试!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯