hdu 1002 为什么一直WA?
#include<stdio.h>#include<string.h>#defineMAX_LEN1000intx[MAX_LEN+10];inty[MAX_LEN+10...
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
int 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 nLen1,nLen2;
int main(){
int n,Case=1;//c表示进位。
int i,j,ok;
scanf("%d",&n);
while(n--){
memset(x, 0, sizeof(x));
memset(y, 0, sizeof(y));
scanf("%s",a);
scanf("%s",b);
printf("Case %d:\n",Case);
printf("%s + %s = ",a,b);
j=0;
for (i=(strlen(a)-1); i>=0;i-- ) {
x[j]=a[i]-'0';
j++;
}
j=0;
for (i=(strlen(b)-1); i>=0;i-- ) {
y[j]=b[i]-'0';
j++;
}
memset(sum, 0, sizeof(sum));
for (i=0; i<(MAX_LEN+10); i++) {
sum[i]=x[i]+y[i];
if (x[i]+y[i]>10) {
sum[i] -= 10;
sum[i+1]++;
}
}
ok=0;
for (i=MAX_LEN; i>=0; i--) {
if (sum[i]!=0) {
ok=1;
}
if (ok==1) {
printf("%d",sum[i]);
}
}
printf("\n");
if (n!=0) {
printf("\n");
}
Case++;
}
return 0;
}
后来我又补充了0 0的情况,可是还是一直WA. 展开
#include <string.h>
#define MAX_LEN 1000
int 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 nLen1,nLen2;
int main(){
int n,Case=1;//c表示进位。
int i,j,ok;
scanf("%d",&n);
while(n--){
memset(x, 0, sizeof(x));
memset(y, 0, sizeof(y));
scanf("%s",a);
scanf("%s",b);
printf("Case %d:\n",Case);
printf("%s + %s = ",a,b);
j=0;
for (i=(strlen(a)-1); i>=0;i-- ) {
x[j]=a[i]-'0';
j++;
}
j=0;
for (i=(strlen(b)-1); i>=0;i-- ) {
y[j]=b[i]-'0';
j++;
}
memset(sum, 0, sizeof(sum));
for (i=0; i<(MAX_LEN+10); i++) {
sum[i]=x[i]+y[i];
if (x[i]+y[i]>10) {
sum[i] -= 10;
sum[i+1]++;
}
}
ok=0;
for (i=MAX_LEN; i>=0; i--) {
if (sum[i]!=0) {
ok=1;
}
if (ok==1) {
printf("%d",sum[i]);
}
}
printf("\n");
if (n!=0) {
printf("\n");
}
Case++;
}
return 0;
}
后来我又补充了0 0的情况,可是还是一直WA. 展开
2个回答
展开全部
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
int 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 nLen1,nLen2;
int main(){
int n,Case=1;//c表示进位。
int i,j,ok;
scanf("%d",&n);
while(n--){
memset(x, 0, sizeof(x));
memset(y, 0, sizeof(y));
scanf("%s",a);
scanf("%s",b);
printf("Case %d:\n",Case);
printf("%s + %s = ",a,b);
j=0;
for (i=(strlen(a)-1); i>=0;i-- ) {
x[j]=a[i]-'0';
j++;
}
j=0;
for (i=(strlen(b)-1); i>=0;i-- ) {
y[j]=b[i]-'0';
j++;
}
memset(sum, 0, sizeof(sum));
for (i=0; i<(MAX_LEN+10); i++) {
sum[i]+=x[i]+y[i];// 这里是sum[i]+=x[i]+y[i],如果是sum[i]=x[i]+y[i]则会把进位丢掉
if (sum[i]>=10) {// 这里是sum[i]>=10,每一位都是0-9的。改后就AC了。
sum[i] -= 10;
sum[i+1]++;
}
}
ok=0;
for (i=MAX_LEN; i>=0; i--) {
if (sum[i]!=0) {
ok=1;
}
if (ok==1) {
printf("%d",sum[i]);
}
}
printf("\n");
if (n!=0) {
printf("\n");
}
Case++;
}
return 0;
}
这是AC的代码哈,你看一下。满意请采纳。
展开全部
#include<iostream>
using namespace std;
#include<string.h>
int main(){
char s1[2000],s2[2000];
int a[10000],count=0;
int nCase;
scanf("%d",&nCase);
getchar();
for(count=1;count<=nCase;count++){
scanf("%s%s",s1,s2);
getchar();
int l1=strlen(s1)-1;
int l2=strlen(s2)-1;
int l=0;
while(l1>=0&&l2>=0)
a[l++]=s1[l1--]-'0'+s2[l2--]-'0';
while(l1>=0)
a[l++]=s1[l1--]-'0';
while(l2>=0)
a[l++]=s2[l2--]-'0';
for(int i=0;i<l-1;i++)
if(a[i]>=10){
a[i+1]+=1;
a[i]%=10;
}
if(a[l-1]>=10){
a[l-1]%=10;
a[l++]=1;
}
int flag=0;
printf("Case %d:\n",count);
printf("%s + %s = ",s1,s2);
for(i=l-1;i>=0;i--){
if(a[i])
flag=1;
if(flag)
printf("%d",a[i]);
}
if(count!=nCase)
printf("\n\n");
else
printf("\n");
}
return 0;
}
我的代码仔细看下吧,其实就是一个模拟数字相加,每一个位置相加,然后再依次进位
需要注意:判断最高维相加是不是需要进位
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询