ACM初级题大数加法,本人写的代码如下,自己输入计算没查出错误,但是OJ报WA,求大神解释

#include <stdio.h>
#include <string.h>
#define SIZE 1100
void Add(char *str1, char *str2, char *str3){
int i, j, i1, i2, tmp, carry;
int len1 = strlen(str1), len2 = strlen(str2);
char ch;
i1 = len1-1; i2 = len2-1;
j = carry = 0;
for( ; i1 >= 0 && i2 >= 0; ++j, --i1, --i2 ){
tmp = str1[i1]-'0'+str2[i2]-'0'+carry;
carry = tmp/10;
str3[j] = tmp%10+'0';
}
while( i1 >= 0 ){
tmp = str1[i1--]-'0'+carry;
carry = tmp/10;
str3[j++] = tmp%10+'0';
}
while( i2 >= 0 ){
tmp = str2[i2--]-'0'+carry;
carry = tmp/10;
str3[j++] = tmp%10+'0';
}
if( carry ) str3[j++] = carry+'0';
str3[j] = '\0';
for( i=0, --j; i < j; ++i, --j ){
ch = str3[i]; str3[i] = str3[j]; str3[j] = ch;
}
}
int main(){
char str1[SIZE],str2[SIZE],str3[SIZE];
while(scanf("%s%s",str1,str2)!=EOF){
Add(str1,str2,str3);
printf("%s\n",str3);
}
return 0;
}

OJ地址:http://acm.hrbeu.edu.cn/index.php?act=problem&id=1010&cid=89
用户名:2011111111
密码:123123

注意对前缀0的处理,给你加了几行代码后ac了
str3[j]='\0';

替换为
j--;
while(j>=0&& str3[j]=='0')j--;
if(j<0)j++;
str3[++j]='\0';
------------------------

#include <stdio.h>#include <string.h>#define SIZE 1100voidAdd(char*str1,char*str2,char*str3){
int i, j, i1, i2, tmp, carry;
int len1 = strlen(str1), len2 = strlen(str2);
char ch;
i1 = len1-1; i2 = len2-1;
j = carry =0;
for(; i1 >=0&& i2 >=0;++j,--i1,--i2 ){
tmp = str1[i1]-'0'+str2[i2]-'0'+carry;
carry = tmp/10;
str3[j]= tmp%10+'0';
}
while( i1 >=0){
tmp = str1[i1--]-'0'+carry;
carry = tmp/10;
str3[j++]= tmp%10+'0';
}
while( i2 >=0){
tmp = str2[i2--]-'0'+carry;
carry = tmp/10;
str3[j++]= tmp%10+'0';
}
if( carry ) str3[j++]= carry+'0';
j--;
while(j>=0&& str3[j]=='0')j--;
if(j<0)j++;
str3[++j]='\0';
for( i=0,--j; i < j;++i,--j ){
ch = str3[i]; str3[i]= str3[j]; str3[j]= ch;
}}int main(){
char str1[SIZE],str2[SIZE],str3[SIZE];
while(scanf("%s%s",str1,str2)!=EOF){
Add(str1,str2,str3);
printf("%s\n",str3);
}
return0;}追问

我刚发现我贴的是标程,本身就AC。。。。你QQ多少,我把我写的发给你吧。。。这里贴不下了

追答

你可以在百度hi中发博客,然后把链接贴这里,我可以给你看看已经评论等。
另外我以前也写过一个大数相加减的算法,可以供你参考吧
http://hi.baidu.com/tanzhangwen/item/b4eca4f42928592c753c4c05

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-17
试一下这几组数据: 023 043 , 034 43

ACM初级题大数加法,本人写的代码如下,自己输入计算没查出错误,但是OJ报...
注意对前缀0的处理,给你加了几行代码后ac了 str3[j]='\\0';替换为 j--;while(j>=0&& str3[j]=='0')j--;if(j<0)j++;str3[++j]='\\0';--- include <stdio.h>#include <string.h>#define SIZE 1100voidAdd(char*str1,char*str2,char*str3){ int i, j, i1, i2, tm...

求助一道ACM题目,编译器得出正确结果但是OJ上显示Wrong Answer_百度...
cost[from][to] = map[to][from] = p;改为 cost[from][to] = cost[to][from] = p;

有时候做ACM题时明明就是对的但是就是WA,而且怎么想也没发现错误,这要...
详见杭电acm主页第一栏F.A.Q P.S.新用一个OJ时最好先读一遍它的FAQ,了解它的提交规则,避免走许多弯路啊...

杭电OJ题目2034,我的答案正确却总是wrong answer
第一,反复读题目,看自己的程序中都满足题目中的要求没有,有时候输出的形式也要注意一下,有可能是要你把所有需要输入的数据都输进去,然后在吧所有输入的处理后再输出,有可能也是输入一个就处理一个,这样的情况也有的,需要注意下,

急!我做的北京大学ACM OJ上第2159题的代码,样例输入和我自己设计的输入...
我的思路和你几乎是一样的,就是简化了些,你可以看下。AC代码如下:include <iostream> include <string> include <algorithm> using namespace std;int main(){ int a[26],b[26];int lena,lenb,i;int flag;string sa,sb;while(cin>>sa>>sb){ for(i=0;i<26;i++)a[i]=b[i]=0;...

【ACM算法】面对算法题,有思路,但是不会用代码写出来
只要你把查找、排序等等的自己用代码实现 基本就可以入门了 不会实现并不是说你不会写 而是你没写过或很少写 没有信心而已 说白了就是if for while 什么的 找本数据结构书 把那些东西尽可能用自己的代码实现 然后再和书上的比对 基本就可以了 思路都是灵感加勤劳的产物 希望对你有帮助哈!

acm题,c语言,快速选择法从大到小排序n个数,并输出前m个数 代码怎么改都...
include<stdio.h>int a[1000001];int i,j,key;void quicksort(int low,int high,int a[]) {if(low < high) {i = low;j = high;key = a[i];}while(i < j) {while(a[j] < key && i < j) j--;if(a[j] > key && i < j) {a[i] = a[j];a[j] = key;i++;...

华为OJ平台上提交后为什么是答案错误,测试用例未全部通过?在CB上运行结...
虽然我不知道华为OJ是什么样,不过应该是ACM模式的吧。如果是的话,那么你的输入输出应该严格按照题目描述的来做,像是printf("Input a number:\\n");这种题目没让你输出的东西你输出了肯定就是错了。

相似回答
大家正在搜