用c语言1000位整数的除法
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
请问哪里错误了!!!
#include<stdio.h>
#include<string.h>
int main() {
int num; //存放被除数
int q; //存放商
int r, lenth=0; //余数,被除数的位数
char c;
int b,sign=0; //除数 ,空格标识符
while ((c=getchar())!='\n') { //存储被除数跟除数
if (sign == 0&&c!=' ') { //存储被除数
num = c - '0';
lenth++;
}
if(sign==1){ //存储除数
b = c - '0';
}
if (c == ' ') {//遇到空格sign为1;
sign = 1;
}
}
int diff = 0; //除法中每一次的被除数
int qi = 0,ni=0; //商,被除数中的数组坐标
for (int i = 0; i < lenth; i++) {
diff = diff * 10 + num;
if (diff < b&&i==0) { //被除数的第一位数小于除数,向后借位,坐标加一
ni++;
diff = diff * 10 + num;
lenth = lenth - 1;
}
ni++;
q = diff / b;
diff = diff%b;
qi++;
if (i == lenth - 1) { //最后一次做除法的余数为整个除法的余数
r = diff;
}
}
for (int i = 0; i < qi; i++) {
printf("%d",q);
}
printf(" %d\n",r);
return 0;
}
本帖最后由 行客 于 2019-2-28 11:07 编辑
这个应该还是算法上的问题,感觉你的算法不是很好理解。
比如,你的代码输入“0 1”做测试,结果就会出现问题。
你是就想在这个代码里找出错误,还是随便改代码啊? 本帖最后由 910201513 于 2019-2-26 20:10 编辑
呃,智障了,看成了1000,原来是1000位{:10_243:} {:10_243:} {:10_243:} 那个错误的测试点是啥能告知吗?我细细捋了一下,没有发现啥错误啊 910201513 发表于 2019-2-26 20:49
那个错误的测试点是啥能告知吗?我细细捋了一下,没有发现啥错误啊
没有我也不知道是哪里的 测试结果就给了上面的图 @行客
大佬,求教 大佬!题都有点没读懂! ALifeTime 发表于 2019-2-27 09:14
大佬!题都有点没读懂!
就是A/B,求商和余,输入A(不大于1000位的正整数),B(一位正整数),你设计程序输出商和余 910201513 发表于 2019-2-26 22:30
@行客
大佬,求教
没有看出错误。在线测试代码也并未提示错误:
https://www.nowcoder.com/pat/6/problem/4043 行客 发表于 2019-2-27 16:07
没有看出错误。在线测试代码也并未提示错误:
https://www.nowcoder.com/pat/6/problem/4043
但是pta的测试点过不去 910201513 发表于 2019-2-27 16:08
但是pta的测试点过不去
测试地址是? 行客 发表于 2019-2-27 16:07
没有看出错误。在线测试代码也并未提示错误:
https://www.nowcoder.com/pat/6/problem/4043
https://pintia.cn/problem-sets/994805260223102976/problems 本帖最后由 行客 于 2019-2-28 11:13 编辑
行客 发表于 2019-2-27 21:54
这个应该还是算法上的问题,感觉你的算法不是很好理解。
比如,你的代码输入“0 1”做测试,结果就会出 ...
#include<stdio.h>
int main() {
int num; //存放被除数
int q; //存放商
int r, lenth=0; //余数,被除数的位数
char c;
int b,sign=0; //除数 ,空格标识符
while ((c=getchar())!='\n') { //存储被除数跟除数
if (sign == 0&&c!=' ') { //存储被除数
num = c - '0';
lenth++;
}
if(sign==1){ //存储除数
b = c - '0';
break;
}
if (c == ' ') {//遇到空格sign为1;
sign = 1;
}
}
int diff = 0; //除法中每一次的被除数
int qi = 0,ni=0; //商,被除数中的数组坐标
int i = 0;
if (lenth == 1)
{
qi = 1;
q = num / b;
r = num % b;
}
else
{
for (i = 0; i < lenth; i++) {
diff = diff * 10 + num;
if (diff < b&&i==0) { //被除数的第一位数小于除数,向后借位,坐标加一
ni++;
diff = diff * 10 + num;
lenth = lenth - 1;
}
ni++;
q = diff / b;
diff = diff%b;
qi++;
if (i == lenth - 1) { //最后一次做除法的余数为整个除法的余数
r = diff;
}
}
}
for (i = 0; i < qi; i++) {
printf("%d",q);
}
printf(" %d\n",r);
return 0;
} 910201513 发表于 2019-2-26 22:30
@行客
大佬,求教
已解决 行客 发表于 2019-2-28 11:06
已解决
谢谢 行客 发表于 2019-2-27 21:54
这个应该还是算法上的问题,感觉你的算法不是很好理解。
比如,你的代码输入“0 1”做测试,结果就会出 ...
谢谢了 找出错误就好了
页:
[1]