杭电1002 求救,运行完全正确,按要求做的,提交时提示Compilation Error
#include<stdio.h>#include<string.h>voidmain(){intt,i,k,x;intm,n;scanf("%d",&t);chara[...
#include<stdio.h>
#include<string.h>
void main()
{
int t,i,k,x;
int m,n;
scanf("%d",&t);
char a[t][100],b[t][100];
int aa[100]={0},bb[100]={0};
int sum[t][100];
for(i=0;i<t;i++)
{
scanf("%s %s",&a[i],&b[i]);
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
for(int j=k;j>0;j--,m--,n--)
{
if(m>0) aa[j]=a[i][m-1]-'0';
else aa[j]=0;
if(n>0) bb[j]=b[i][n-1]-'0';
else bb[j]=0;
}
for(int j=k;j>=0;j--)
{
if(j==k)
{
sum[i][j]=(aa[j]+bb[j])%10;
x=(aa[j]+bb[j])/10;
}
else
{
sum[i][j]=(aa[j]+bb[j]+x)%10;
x=(aa[j]+bb[j]+x)/10;
}
}
}
for(i=0;i<t;i++)
{
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
printf("Case %d:\n%s + %s = ",i+1,a[i],b[i]);
if(sum[i][0]==0)
for(int j=1;j<=k;j++)
printf("%d",sum[i][j]);
else
for(int j=0;j<=k;j++)
printf("%d",sum[i][j]);
printf("\n");
printf("\n");
}
}
请指出错误,调试到AC的加100分! 展开
#include<string.h>
void main()
{
int t,i,k,x;
int m,n;
scanf("%d",&t);
char a[t][100],b[t][100];
int aa[100]={0},bb[100]={0};
int sum[t][100];
for(i=0;i<t;i++)
{
scanf("%s %s",&a[i],&b[i]);
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
for(int j=k;j>0;j--,m--,n--)
{
if(m>0) aa[j]=a[i][m-1]-'0';
else aa[j]=0;
if(n>0) bb[j]=b[i][n-1]-'0';
else bb[j]=0;
}
for(int j=k;j>=0;j--)
{
if(j==k)
{
sum[i][j]=(aa[j]+bb[j])%10;
x=(aa[j]+bb[j])/10;
}
else
{
sum[i][j]=(aa[j]+bb[j]+x)%10;
x=(aa[j]+bb[j]+x)/10;
}
}
}
for(i=0;i<t;i++)
{
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
printf("Case %d:\n%s + %s = ",i+1,a[i],b[i]);
if(sum[i][0]==0)
for(int j=1;j<=k;j++)
printf("%d",sum[i][j]);
else
for(int j=0;j<=k;j++)
printf("%d",sum[i][j]);
printf("\n");
printf("\n");
}
}
请指出错误,调试到AC的加100分! 展开
3个回答
展开全部
完全按照你的程序给你改的,代码如下:
你的错误主要在于几点:
1)你的字符串定义太小了100不够 题目说不大于1000 所以应该定义大点 我改后的代码定义为1002
2)你定义数组大小的时候用变量,变量可以用,就像另外一位朋友回复的用new来申请,或者就按我这里的一样改成常量并放到外面定义T 定义为20是因为题目说测试数据不大于20;我这里代码N也放到外面了。其实T可以用大于等于20的整数替换,N可以用大于1000的整数替换
3)aa和bb需要在每次计算开始时候清零,你放到外面的话上次的结果保存了就会出错;我把它调到里面的话,这样每次它都变成零了,就防止出错了。
4)最后就是输出的时候,是他们之间输出空格,不是每个数据都输出空格
#include<stdio.h>
#include<string.h>
#define T 20
#define N 1002
void main()
{
int t,i,k,x;
int m,n;
scanf("%d",&t);
char a[T][N],b[T][N];
int sum[T][N];
for(i=0;i<t;i++)
{ int aa[N]={0},bb[N]={0}; //放到里面 让它每做完一次就全部变成0,放外面的话就会保存前一次的值
scanf("%s %s",&a[i],&b[i]);
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
for(int j=k;j>0;j--,m--,n--)
{
if(m>0) aa[j]=a[i][m-1]-'0';
else aa[j]=0;
if(n>0) bb[j]=b[i][n-1]-'0';
else bb[j]=0;
}
for(int j=k;j>=0;j--)
{
if(j==k)
{
sum[i][j]=(aa[j]+bb[j])%10;
x=(aa[j]+bb[j])/10;
}
else
{
sum[i][j]=(aa[j]+bb[j]+x)%10;
x=(aa[j]+bb[j]+x)/10;
}
}
}
for(i=0;i<t;i++)
{
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
printf("Case %d:\n%s + %s = ",i+1,a[i],b[i]);
if(sum[i][0]==0)
for(int j=1;j<=k;j++)
printf("%d",sum[i][j]);
else
for(int j=0;j<=k;j++)
printf("%d",sum[i][j]);
printf("\n");
if(i<t-1)printf("\n"); //两个测试之间才输出空行
}
}
你的错误主要在于几点:
1)你的字符串定义太小了100不够 题目说不大于1000 所以应该定义大点 我改后的代码定义为1002
2)你定义数组大小的时候用变量,变量可以用,就像另外一位朋友回复的用new来申请,或者就按我这里的一样改成常量并放到外面定义T 定义为20是因为题目说测试数据不大于20;我这里代码N也放到外面了。其实T可以用大于等于20的整数替换,N可以用大于1000的整数替换
3)aa和bb需要在每次计算开始时候清零,你放到外面的话上次的结果保存了就会出错;我把它调到里面的话,这样每次它都变成零了,就防止出错了。
4)最后就是输出的时候,是他们之间输出空格,不是每个数据都输出空格
#include<stdio.h>
#include<string.h>
#define T 20
#define N 1002
void main()
{
int t,i,k,x;
int m,n;
scanf("%d",&t);
char a[T][N],b[T][N];
int sum[T][N];
for(i=0;i<t;i++)
{ int aa[N]={0},bb[N]={0}; //放到里面 让它每做完一次就全部变成0,放外面的话就会保存前一次的值
scanf("%s %s",&a[i],&b[i]);
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
for(int j=k;j>0;j--,m--,n--)
{
if(m>0) aa[j]=a[i][m-1]-'0';
else aa[j]=0;
if(n>0) bb[j]=b[i][n-1]-'0';
else bb[j]=0;
}
for(int j=k;j>=0;j--)
{
if(j==k)
{
sum[i][j]=(aa[j]+bb[j])%10;
x=(aa[j]+bb[j])/10;
}
else
{
sum[i][j]=(aa[j]+bb[j]+x)%10;
x=(aa[j]+bb[j]+x)/10;
}
}
}
for(i=0;i<t;i++)
{
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
printf("Case %d:\n%s + %s = ",i+1,a[i],b[i]);
if(sum[i][0]==0)
for(int j=1;j<=k;j++)
printf("%d",sum[i][j]);
else
for(int j=0;j<=k;j++)
printf("%d",sum[i][j]);
printf("\n");
if(i<t-1)printf("\n"); //两个测试之间才输出空行
}
}
艾普斯
2024-07-18 广告
2024-07-18 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产...
点击进入详情页
本回答由艾普斯提供
展开全部
你用G++提交试试,不过你的代码还有其它问题。
给你个AC了的:
#include <iostream>
#include <string>
using namespace std;
string add(string a,string b) {
if (a.size()!=b.size()) {
if (a.size()<b.size()) {
int n=b.size()-a.size();
while (n--)
a.insert(0,"0");
} else {
int n=a.size()-b.size();
while (n--)
b.insert(0,"0");
}
}
int g=0;
for (int i=a.size()-1;i>=0;i--) {
int s=(a[i]-48+b[i]-48+g);
a[i]=(s%10)+48;
g=s/10;
}
if (g) {
string tmp;
tmp.push_back(g+48);
a.insert(0,tmp);
}
return a;
}
int main() {
int t,no=1;
string a,b;
cin>>t;
while (t--) {
cin>>a>>b;
if (no>1)
cout<<endl;
cout<<"Case "<<no++<<":"<<endl;
cout<<a<<" + "<<b<<" = "<<add(a,b)<<endl;
}
return 0;
}
给你个AC了的:
#include <iostream>
#include <string>
using namespace std;
string add(string a,string b) {
if (a.size()!=b.size()) {
if (a.size()<b.size()) {
int n=b.size()-a.size();
while (n--)
a.insert(0,"0");
} else {
int n=a.size()-b.size();
while (n--)
b.insert(0,"0");
}
}
int g=0;
for (int i=a.size()-1;i>=0;i--) {
int s=(a[i]-48+b[i]-48+g);
a[i]=(s%10)+48;
g=s/10;
}
if (g) {
string tmp;
tmp.push_back(g+48);
a.insert(0,tmp);
}
return a;
}
int main() {
int t,no=1;
string a,b;
cin>>t;
while (t--) {
cin>>a>>b;
if (no>1)
cout<<endl;
cout<<"Case "<<no++<<":"<<endl;
cout<<a<<" + "<<b<<" = "<<add(a,b)<<endl;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%d",&t);
char a[t][100],b[t][100];
int aa[100]={0},bb[100]={0};
int sum[t][100];
这段有问题。t是运行时接收的输入,而char a[t][100]等的定义是在编译中就需要确定存储空间的,所以不能编译。如果实在是需要根据输入动态分配数组,那应该用new 或者 malloc。
编译通过、可运行参考代码如下,修改的地方做了注释。
#include<stdio.h>
#include<string.h>
void main()
{
int t,i,k,x;
int m,n;
scanf("%d",&t);
//下面两句定义变量不能通过编译
//char a[t][100];
//char b[t][100];
//改为下面两句的定义,并且new了空间
char (*a)[100]=new char[t][100];
char (*b)[100]=new char[t][100];
int aa[100]={0},bb[100]={0};
//下面的这句话也是定义错误,不能通过编译
//int sum[t][100];
//改成下面这句,定义后用new来分配空间
int (*sum)[100] = new int[t][100];
for(i=0;i<t;i++)
{
int j;
scanf("%s %s",a[i],b[i]);
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
for(j=k;j>0;j--,m--,n--)
{
if(m>0) aa[j]=a[i][m-1]-'0';
else aa[j]=0;
if(n>0) bb[j]=b[i][n-1]-'0';
else bb[j]=0;
}
for(j=k;j>=0;j--)
{
if(j==k)
{
sum[i][j]=(aa[j]+bb[j])%10;
x=(aa[j]+bb[j])/10;
}
else
{
sum[i][j]=(aa[j]+bb[j]+x)%10;
x=(aa[j]+bb[j]+x)/10;
}
}
}
for(i=0;i<t;i++)
{
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
printf("Case %d:\n%s + %s = ",i+1,a[i],b[i]);
if(sum[i][0]==0)
for(int j=1;j<=k;j++)
printf("%d",sum[i][j]);
else
for(int j=0;j<=k;j++)
printf("%d",sum[i][j]);
printf("\n");
printf("\n");
}
}
char a[t][100],b[t][100];
int aa[100]={0},bb[100]={0};
int sum[t][100];
这段有问题。t是运行时接收的输入,而char a[t][100]等的定义是在编译中就需要确定存储空间的,所以不能编译。如果实在是需要根据输入动态分配数组,那应该用new 或者 malloc。
编译通过、可运行参考代码如下,修改的地方做了注释。
#include<stdio.h>
#include<string.h>
void main()
{
int t,i,k,x;
int m,n;
scanf("%d",&t);
//下面两句定义变量不能通过编译
//char a[t][100];
//char b[t][100];
//改为下面两句的定义,并且new了空间
char (*a)[100]=new char[t][100];
char (*b)[100]=new char[t][100];
int aa[100]={0},bb[100]={0};
//下面的这句话也是定义错误,不能通过编译
//int sum[t][100];
//改成下面这句,定义后用new来分配空间
int (*sum)[100] = new int[t][100];
for(i=0;i<t;i++)
{
int j;
scanf("%s %s",a[i],b[i]);
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
for(j=k;j>0;j--,m--,n--)
{
if(m>0) aa[j]=a[i][m-1]-'0';
else aa[j]=0;
if(n>0) bb[j]=b[i][n-1]-'0';
else bb[j]=0;
}
for(j=k;j>=0;j--)
{
if(j==k)
{
sum[i][j]=(aa[j]+bb[j])%10;
x=(aa[j]+bb[j])/10;
}
else
{
sum[i][j]=(aa[j]+bb[j]+x)%10;
x=(aa[j]+bb[j]+x)/10;
}
}
}
for(i=0;i<t;i++)
{
m=strlen(a[i]);
n=strlen(b[i]);
k=m>n?m:n;
printf("Case %d:\n%s + %s = ",i+1,a[i],b[i]);
if(sum[i][0]==0)
for(int j=1;j<=k;j++)
printf("%d",sum[i][j]);
else
for(int j=0;j<=k;j++)
printf("%d",sum[i][j]);
printf("\n");
printf("\n");
}
}
更多追问追答
追问
AC不过!用什么编译器说一下,我试了C,G++,GCC都不行
追答
我用的是vc++6.0。编译连接都通过了,运行正常,输出两个字串的和也正确。
你的编译器是什么?什么地方过不了?请详细些。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询