#3632: 問題指教


ck18 (Ken)

學校 : 國立交通大學
編號 : 8419
來源 : [180.218.32.215]
最後登入時間 :
2010-11-08 21:53:38
d615. 計算機運算 -- 葆葆 | From: [180.218.37.34] | 發表日期 : 2010-04-13 09:06

與正確輸出不相符(line:2)
您的答案為: 632975360
正確答案為: 249975000000000000
 
#include <stdio.h>

int main()
{
char buf[1000000], *p;
char opd;
int i, count, length;
long sum, op1, op2;
while ( scanf("%d ", &count) != EOF )
{
for ( i = 0 ; i < count ; ++i ) 
{
gets(buf);
 
/* 取得第一個運算元 */ 
sscanf(p = buf, "%ld%n ", &op1, &length);
sum = op1;
p += length;
 
/* 取得運算元與運算子 */ 
for ( ; sscanf(p, " %c %ld%n ", &opd, &op2, &length) == 2 ; p += length ) 
{
switch (opd)
{
case '+' :
sum += op2;
break;
case '-' :
sum -= op2;
break;
case '*' :
sum *= op2;
break;
case '/' :
sum /= op2;
break;
}
}
printf("%ld\n", sum);
}
return 0;
 
請教一下問題可能會出在哪邊?謝謝。 
 
#3634: Re:問題指教


linishan (L)

學校 : 國立交通大學
編號 : 1090
來源 : [104.132.150.102]
最後登入時間 :
2019-05-10 19:57:54
d615. 計算機運算 -- 葆葆 | From: [125.228.105.246] | 發表日期 : 2010-04-13 19:24

與正確輸出不相符(line:2)
您的答案為: 632975360
正確答案為: 249975000000000000
#include

int main()
{
char buf[1000000], *p;
char opd;
int i, count, length;
long sum, op1, op2;
while ( scanf("%d ", &count) != EOF )
{
for ( i = 0 ; i < count ; ++i ) 
{
gets(buf);
/* 取得第一個運算元 */ 
sscanf(p = buf, "%ld%n ", &op1, &length);
sum = op1;
p += length;
/* 取得運算元與運算子 */ 
for ( ; sscanf(p, " %c %ld%n ", &opd, &op2, &length) == 2 ; p += length ) 
{
switch (opd)
{
case '+' :
sum += op2;
break;
case '-' :
sum -= op2;
break;
case '*' :
sum *= op2;
break;
case '/' :
sum /= op2;
break;
}
}
printf("%ld\n", sum);
}
return 0;
請教一下問題可能會出在哪邊?謝謝。 


全部改long long int看看 . .

沒搞錯的話 int long 在32位元平台好像都是 2147483647 (21E)

 
#3637: Re:問題指教


ck18 (Ken)

學校 : 國立交通大學
編號 : 8419
來源 : [180.218.32.215]
最後登入時間 :
2010-11-08 21:53:38
d615. 計算機運算 -- 葆葆 | From: [180.218.37.34] | 發表日期 : 2010-04-14 10:26

與正確輸出不相符(line:2)
您的答案為: 632975360
正確答案為: 249975000000000000
#include

int main()
{
char buf[1000000], *p;
char opd;
int i, count, length;
long sum, op1, op2;
while ( scanf("%d ", &count) != EOF )
{
for ( i = 0 ; i < count ; ++i ) 
{
gets(buf);
/* 取得第一個運算元 */ 
sscanf(p = buf, "%ld%n ", &op1, &length);
sum = op1;
p += length;
/* 取得運算元與運算子 */ 
for ( ; sscanf(p, " %c %ld%n ", &opd, &op2, &length) == 2 ; p += length ) 
{
switch (opd)
{
case '+' :
sum += op2;
break;
case '-' :
sum -= op2;
break;
case '*' :
sum *= op2;
break;
case '/' :
sum /= op2;
break;
}
}
printf("%ld\n", sum);
}
return 0;
請教一下問題可能會出在哪邊?謝謝。 


全部改long long int看看 . .

沒搞錯的話 int long 在32位元平台好像都是 2147483647 (21E)

AC 了。改天 long long int 就可以了,感謝你。
 
ZeroJudge Forum