咳咳。。问题已经解决了,成功ac,但蒟蒻还是想问一句,为什么限制输出的必须是数字类型不能是字符类型。。。
by Cyan_rose @ 2018-07-10 14:24:02
@[Cyan_rose](/space/show?uid=48246) 同楼主第六点AC其余WA,我用的是数字类型输出但是为什么不行??请大佬指点。
代码如下:
```cpp
#include<bits/stdc++.h>
using namespace std;
string sa,sb;
int a[10002],b[10002],ans[10001];
void Init (string,int[]);
void Minus (int [],int [],int[]);
int main()
{
getline(cin,sa);
getline(cin,sb);
if (sa<sb)
{
string st;
st=sa;sa=sb;sb=st;
printf("-");
}
a[0]=sa.size();
b[0]=sb.size();
ans[0]=1;
Init(sa,a);
Init(sb,b);
Minus(a,b,ans);
for (int i=ans[0];i>=1;--i)
printf("%d",ans[i]);
return 0;
}
void Init (string str,int n[])
{
for (int i=1;i<=n[0];++i)
n[i]=str[n[0]-i]-'0';
}
void Minus (int ma[],int mb[],int mans[])
{
while (mans[0]<=ma[0]||mans[0]<=mb[0])
{
if (ma[mans[0]]<mb[mans[0]])
{
ma[mans[0]]+=10;
ma[mans[0]+1]--;
}
mans[mans[0]]=ma[mans[0]]-mb[mans[0]];
mans[0]++;
}
while (mans[mans[0]]==0&&mans[0]>1) mans[0]--;
}
```
by 4kilometers @ 2018-07-10 16:30:20
各位大佬帮看一下啊啊啊
by 4kilometers @ 2018-07-10 16:44:35
貌似是这一步
if (sa<sb)
string类型比较的时候优先比较第一位大小,所以在位数不同的时候会出问题
比如我试了下1800和900
(中间在init后面加了两串循环输出数组)
出来是这样的:
-3 0 0 9 0 0 0 0 0
4 0 0 8 1 0 0 0 0
9100
多带的那个负号应该是前面比较的时候输出的
哦对了还有,你用getline貌似读了一排,输入数据如果是一排两个就会挂的吧(有没有这个数据我也不知道)
by Cyan_rose @ 2018-07-11 11:16:22
@[执笔、捃尘](/space/show?uid=18535)
by Cyan_rose @ 2018-07-11 11:16:39
@[Cyan_rose](/space/show?uid=48246) 多谢大佬指点!已经AC。确实是getline和字串长度问题。谢谢不厌其烦的修改
by 4kilometers @ 2018-07-11 14:19:09
@[执笔、捃尘](/space/show?uid=18535)
互帮互助应该的嘛~
(还有不要叫我大佬。。一个做题比你还少的蒟蒻真的瑟瑟发抖.jpg)
by Cyan_rose @ 2018-07-11 16:04:10
@[Cyan_rose](/space/show?uid=48246) 懂得比我多就是大佬
by 4kilometers @ 2018-07-11 16:28:13
吓!我这个NOIp普及组从来没做出3题的人怎么办啊?
by yummy @ 2018-07-23 09:40:09
@[执笔、捃尘](/space/show?uid=18535) 用cin就能过了
by A_puku @ 2018-07-28 09:34:34