1+2+3+4......+100000=?我为什么会错误

xcode2003 2004-09-12 02:37:01
int x = 0;
for(int i=1;i<100001;i++)
x = x+i;

printf("%d",x);
...全文
312 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
an_bachelor 2004-09-14
  • 打赏
  • 举报
回复
但是int的位数在不同编译器里也是不同的TC20是16bit但VC是32bit 并不是.NET才是32bit
daiwb 2004-09-13
  • 打赏
  • 举报
回复
#ifndef WIN32
typedef long long i64;
#else
typedef __int64 i64;
#endif

void input(i64 &a)
{
cin >> temp;
a = 0;
for(int i = 0; temp[i] != '\0'; ++i)
a = a * 10 + (int)(temp[i] - '0');
}
void print(i64 a)
{
if(a > 9)
print(a/10);
cout << (int)(a%10);
}
lyf_sky 2004-09-13
  • 打赏
  • 举报
回复
同意
hyl6688 2004-09-13
  • 打赏
  • 举报
回复
C语言里的int是int16了 long才是 int32 不像.net里int 是int32 long是int64
maltt521 2004-09-12
  • 打赏
  • 举报
回复
应该是数字的长度超过了整型的范围,我记得整型最大是32768吧,你可以去看一下C语言的资料,那个上边对各种数据类型讲的特别清楚,我觉得你可以定义为长整型或者双精度类型的,所以也不应该用%d来输出。
Squall1009 2004-09-12
  • 打赏
  • 举报
回复
同意verybigbug的观点。
n*(n+1)/2可读性很高啊.
CharmDream 2004-09-12
  • 打赏
  • 举报
回复
如果是大数运算问题
找一个或做一个大数类来计算
CharmDream 2004-09-12
  • 打赏
  • 举报
回复
大数运算问题
找一个或做一个大数类来计算
  • 打赏
  • 举报
回复
昏!
yinzhaohui(一切努力)是对的!
#include <iostream>
using namespace std;

void main(void)
{
__int64 x = 100000I64;
x = x*(x+1)/2;
printf("x = %I64d\n",x);

__int64 y = 0;
for(__int64 i = 1; i<=100000; i++ )
{
y += i;
}
printf("y = %I64d\n",y);
}
结果:x=5000050000
y=5000050000
  • 打赏
  • 举报
回复
刚才用int、long int、long double、__int64都算了一下,

全是错误的!

手算了一下,应该是100000×(100001)/2=5000050000

  • 打赏
  • 举报
回复
哦,sorry!
结果是错的
fxj51983 2004-09-12
  • 打赏
  • 举报
回复
各个环境下的int的所占用的字节是不一样的!有的是2个字节有的是4字节!
建议使用DWORD或者long
  • 打赏
  • 举报
回复
我在windowsXP,VC6下,运行下面的程序,没有出现错误啊!楼主,你怎么搞的?
运行结果是:704982704

#include <iostream>
using namespace std;

void main(void)
{
int x = 0;
for(int i=1;i<100000;i++)
{
x += i;
}
cout << x << endl;
}
yinzhaohui 2004-09-12
  • 打赏
  • 举报
回复
可能是为了学习需要
使用__int64
__int64 x = 0;
for(__int64 i=1;i<100001I64;i++)
x = x+i;

printf("%I64d",x);
broadoceans 2004-09-12
  • 打赏
  • 举报
回复
一般来说int 是32位,不是16位
可能是超出范围了,建议你用
_int64即64位整数。

各位楼上的,至于有没有效率也没有问你,回答有何意义?
mxh0506 2004-09-12
  • 打赏
  • 举报
回复
可读性可以靠详细的注释和良好的代码书写风格来保证,而绝不是牺牲代码的效率
CPU是为用户服务的,而不是为程序员——这句话听过吧?
mxh0506 2004-09-12
  • 打赏
  • 举报
回复
记得这是某个公司的面试题,如果照你这么写,就S菜了
James_ht 2004-09-12
  • 打赏
  • 举报
回复
to lyrzhlgq(笑天,笑地)
如果n是1万以上,是否要循环1万以上次。
n*(n+1)/2这个公式在数学中也有讲呀。计算机是和数学结合很紧密的学科。

oyljerry 2004-09-12
  • 打赏
  • 举报
回复
结果超出范围了,换数据类型吧
prettywolf 2004-09-12
  • 打赏
  • 举报
回复
如豆豆所说,
早就溢出了.
long未必可以,
用double long吧.
加载更多回复(6)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧