哪位帮我看一下错哪了,题目在http://noi.openjudge.cn/ch0106/11/
#include
#include
using namespace std;
int main(){
char a[250],b[250];
fgets(a,250,stdin);
fgets(b,250,stdin); //把数据储存在字符中
int A[250],B[250];
int i,n=strlen(a)-1,m=strlen(b)-1;
for(i=0;i-1-i]-'0';
}
for(i=0;i-1-i]-'0'; //把字符转换为数字 ,并反向
}
for(i=m;i//把空的位置用0填上,使两数位数一致
B[i]=0;
m=n;
}
int c[250],q,p=0;
for(i=0;i//设C,储存A-B
q=A[i]-B[i]-p;
if(q<0){
p=1;
q+=10;
}
else p=0;
c[m-1-i]=q;
}
for(i=0;c[i]==0&&i//除去多余的前导0
}
for(;i//输出答案
}
return 0;
}
因为你没有处理两个数相等的情况,如果两个数相等,你的代码没有任何输出,需要在去除前导0的下面加一个判断,如下图所示:
完整代码如下:
#include<iostream>
#include<string.h>
using namespace std;
int main() {
char a[250], b[250];
fgets(a, 250, stdin);
fgets(b, 250, stdin); //把数据储存在字符中
int A[250], B[250];
int i, n = strlen(a) - 1, m = strlen(b) - 1;
for (i = 0; i < n; i++) {
A[i] = a[n - 1 - i] - '0';
}
for (i = 0; i < m; i++) {
B[i] = b[m - 1 - i] - '0'; //把字符转换为数字 ,并反向
}
for (i = m; i < n; i++) { //把空的位置用0填上,使两数位数一致
B[i] = 0;
m = n;
}
int c[250], q, p = 0;
for (i = 0; i < m; i++) { //设C,储存A-B
q = A[i] - B[i] - p;
if (q < 0) {
p = 1;
q += 10;
}
else p = 0;
c[m - 1 - i] = q;
}
for (i = 0; c[i] == 0 && i < m; i++) { //除去多余的前导0
}
//修改,添加这个判断
if (i == m)
{
cout << "0";
return 0;
}
for (; i < m; i++) {
cout << c[i]; //输出答案
}
return 0;
}
现在什么结果啊?测试了一下没什么问题啊
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!