简单编程题: hdu1002 为什么是wrong answer?

作者&投稿:厍钩 (若有异议请与网页底部的电邮联系)
hdu1002一直Wrong Answer,答案是对的,求助哪错了?~

for(i=0;i<l;i++)
{
c[i]=a1[i]+b1[i];
if(c[i]>=10)
{
c[i]%=10;
c[i+1]++;
}
}
这里写挫了。。
c[i] =a1[i]+b1[i]+c[i];
因为有进位的话 c[i] %= 10, c[i+1]++;
i++后 c[i] = a1[i] + b1[i]。。你就没有加上进位了,直接给c[i]赋值了

高精度大数,I64d是存不了的

用__int64来做杭电1002是错的
必须使用数组模拟

这个题目是一道大数题,数字位数超过1000,可谓初学者杀手,你程序里的64位整型只有20多位,并不能胜任,以下是我的代码,希望你能看懂,对你有帮助:

#include <stdio.h>
#include <string.h>
void main()
{
char s1[1001],s2[1001];
int cas,c,i,j,x,lc;
while(scanf("%d",&cas)!=EOF)
{
for(x=1;x<=cas;x++)
{
scanf("%s%s",s1,s2);
int a[1001]={0},b[1001]={0};
for(i=strlen(s1)-1,j=0;i>=0;i--,j++)
a[i]=s1[j]-'0';
c=j+1;
for(i=strlen(s2)-1,j=0;i>=0;i--,j++)
b[i]=s2[j]-'0';
j++;
lc=j>c?j:c;

c=0;
for(i=0;i<=lc;i++)
{
a[i]+=b[i]+c;
c=a[i]/10;
a[i]%=10;
}
for(i=lc;a[i]==0;i--);
lc=i;
printf("Case %d:\n%s + %s = ",x,s1,s2);
for(i=lc;i>=0;i--)
printf("%d",a[i]);
printf("\n");
if(x!=cas)printf("\n");
}
}
}

大意就是数组模拟笔算方法,一位一位加,用一个变量存进位,每位加法同时加上上次的进位,然后处理一下输入输出就行了。
说难不难,你看着代码模拟一下就明白了

高精度啊~高精度~


昌平区18761309798: hdu 1002 为什么一直WA? -
务园导升: #include #define MAX_LEN 1000int x[MAX_LEN + 10];int y[MAX_LEN + 10];int sum[MAX_LEN + 10];char a[MAX_LEN + 10];char b[MAX_LEN + 10];int...

昌平区18761309798: HDU1002 为什么PE PE 是小事 哪个大牛帮看看为什么别的数正常 算 1+9 1+9999这些就少一位呢
务园导升: 第一个PE的问题.OJ上一般对输出格式要求非常严格的.一个空格一个换行都不能差 你注意SIMPLE OUTPUT中输出是1 + 2 = 3.你的输出是1+2=3 也就是每个数和字符中间是有空格的.要加上. 第二个,你已经计算出o是首位的地址,应该从o到0输出. 但是你输出的是从m-1开始的,所以计算有结果的长度如果是m+1,就不会显示正确结果

昌平区18761309798: hdu - 1002(A + B Problem II) 为什么我会Presentation Error?
务园导升: 题目描述:Output a blank line between two test cases. 也就是说空行只能加在两个case中间,最后一个不用加空行 可以通过第一个case不加空行,后面每一个case前面加一个空行来实现

昌平区18761309798: 杭电 acm 我这个代码为什么一直提示 Presentation Error http://acm.hdu.edu.cn/showproblem.php?pid=1002 -
务园导升: 这个错误说明你的程序是对的,只是输出的格式是有误.你没看到题目,每2个测试数据才空一行,故最后那个是只要一个回车就行了.把main函数里面的:printf("%s\n\n",ch[i]); 改为:printf("%s\n",ch[i]); if(i!=count-1) printf("\n"); 这样就能AC了~~

昌平区18761309798: ACM HDU 1002
务园导升: 我用字符串处理的 #include<iostream> #include<string> #include<algorithm> #include<vector> using namespace std; vector<int> f(vector<int> v1,vector<int> v2) { reverse(v1.begin(),v1.end()); reverse(v2.begin(),v2.end()); int maxsize=v1.size(); if(v2....

昌平区18761309798: 一道简单的编程题,我知道答案,但是不明白为什么i=12
务园导升: i++的意思是先使用i,然后将i+1; 正如上楼说的 int j=i++的意思是 int j = i; i++ ; 希望以上内容对你有帮助..^^

昌平区18761309798: 简单编程题,为什么错了?
务园导升: #include <stdio.h> int main() { int n,i,j; double sum; for(j=0;j<5;i++) { printf("Enter n:"); scanf("%d",&n); sum=0.0; for(i=1;i<=2*n-1;i+=2) sum+=1.0/i; printf("sum=%.6f\n\n",sum); } } 楼主的错误不是程序的问题,而是算法上有逻辑错误,上面加粗的部分就是错误所在.比如说n=2的话,循环只进行了一次,而不是楼主所要的前两项之和,我想楼主认真想想就会明白了. 上面的程序我进行了点改进,楼主可以用他一次测试5个不同情况的值,就写这么多啦,希望能帮到你

昌平区18761309798: 用java做ACM的题目常出现Compilation Error,求高手指点.... -
务园导升: import java.math.BigInteger; import java.util.Scanner; 没引入这2个包?

昌平区18761309798: 杭电acm1002为什么我的老错了 -
务园导升: 如果我没记错的话是这样的001+1=2你的001+1=002

昌平区18761309798: c语言 acm求助 杭电 1002 代码如下: -
务园导升: #include "stdio.h"#include "string.h"#include<conio.h>#define maxmium 1000 void add(char c[],char d[]); char a[1001],b[1001]; void main() { int t,i=0,j=0; char temp[40][1001];//这个开太小了,1千位加1千位可能会是1千零1位 char c[1001],d[...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网