C语言 输出结果为什么是0000

发布网友 发布时间:2022-04-23 04:40

我来回答

5个回答

热心网友 时间:2023-08-05 02:10

int s,t;是整数类型,最多可以表示到(2^31-1)的正整数
而国王的麦子数量会达到2^63的数量级,s和t根本装不下,当然会出错追问那要用long double还是double呢

追答整数部分可以试试unsigned long long
关键是你的s,和t也不够大

这样改:
int i=1,s=0,t=1; 改成 unsigned long long i=1,s=0,t=1;
long double m; 改成 unsigned long double m;

printf("国王要付给宰相%.4ld公斤麦子",m); 改成 printf("国王要付给宰相%.4lf公斤麦子",m);

热心网友 时间:2023-08-05 02:11

m=s/25000把这句放到for循环里试下,你这样写的话,应该默认的S值是0

热心网友 时间:2023-08-05 02:11

printf("国王要付给宰相%.4lf公斤麦子",m);//输出结果追问变成了0.0000

追答for(i=1;i<=;i++)
{
s=s+t; //累加
t=s*2; // 后一个格的麦子数是前面的两倍
}

热心网友 时间:2023-08-05 02:12

#include<stdio.h>
int main()
{
int i=1; //定义循环变量
long double m,t=1,s=0; //定义麦子的质量为长双精度型
for(i=1;i<=;i++)
{
s=s+t; //累加
t=t*2; // 后一个格的麦子数是前面的两倍
}
m=s/25000; //计算麦子的质量
printf("国王要付给宰相%.4llf公斤麦子",m);//输出结果
}

//////数据类型,和输出格式不对!!!!追问运行完你这个程序输出的是-0.0000

热心网友 时间:2023-08-05 02:13

变量s,t被int*住了,改成long double应该可以了

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com