九少 发表于 2019-2-26 17:21:56

用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-26 17:21:57

本帖最后由 行客 于 2019-2-28 11:07 编辑

这个应该还是算法上的问题,感觉你的算法不是很好理解。

比如,你的代码输入“0 1”做测试,结果就会出现问题。

你是就想在这个代码里找出错误,还是随便改代码啊?

910201513 发表于 2019-2-26 19:56:41

本帖最后由 910201513 于 2019-2-26 20:10 编辑

呃,智障了,看成了1000,原来是1000位{:10_243:} {:10_243:} {:10_243:}

910201513 发表于 2019-2-26 20:49:09

那个错误的测试点是啥能告知吗?我细细捋了一下,没有发现啥错误啊

九少 发表于 2019-2-26 20:56:23

910201513 发表于 2019-2-26 20:49
那个错误的测试点是啥能告知吗?我细细捋了一下,没有发现啥错误啊

没有我也不知道是哪里的   测试结果就给了上面的图

910201513 发表于 2019-2-26 22:30:31

@行客
大佬,求教

ALifeTime 发表于 2019-2-27 09:14:59

大佬!题都有点没读懂!

910201513 发表于 2019-2-27 11:23:00

ALifeTime 发表于 2019-2-27 09:14
大佬!题都有点没读懂!

就是A/B,求商和余,输入A(不大于1000位的正整数),B(一位正整数),你设计程序输出商和余

行客 发表于 2019-2-27 16:07:00

910201513 发表于 2019-2-26 22:30
@行客
大佬,求教

没有看出错误。在线测试代码也并未提示错误:
https://www.nowcoder.com/pat/6/problem/4043

910201513 发表于 2019-2-27 16:08:05

行客 发表于 2019-2-27 16:07
没有看出错误。在线测试代码也并未提示错误:
https://www.nowcoder.com/pat/6/problem/4043

但是pta的测试点过不去

行客 发表于 2019-2-27 16:10:29

910201513 发表于 2019-2-27 16:08
但是pta的测试点过不去

测试地址是?

910201513 发表于 2019-2-27 16:10:34

行客 发表于 2019-2-27 16:07
没有看出错误。在线测试代码也并未提示错误:
https://www.nowcoder.com/pat/6/problem/4043

https://pintia.cn/problem-sets/994805260223102976/problems

行客 发表于 2019-2-28 11:06:12

本帖最后由 行客 于 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;
}

行客 发表于 2019-2-28 11:06:57

910201513 发表于 2019-2-26 22:30
@行客
大佬,求教

已解决

910201513 发表于 2019-2-28 11:48:21

行客 发表于 2019-2-28 11:06
已解决

谢谢

九少 发表于 2019-2-28 12:26:09

行客 发表于 2019-2-27 21:54
这个应该还是算法上的问题,感觉你的算法不是很好理解。

比如,你的代码输入“0 1”做测试,结果就会出 ...

谢谢了 找出错误就好了
页: [1]
查看完整版本: 用c语言1000位整数的除法