标题:帮忙修改一下代码~大位数减法~
取消只看楼主
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
已结贴  问题点数:20 回复次数:6 
帮忙修改一下代码~大位数减法~
刚刚久久的同学仿照久久的大位数加法写了个大位数减法~运行结果出了点问题~还有这个代码没有考虑小数减大数的负数问题~大家帮忙看看~久久要抽空忙别的了~~~

程序代码:
#include<stdio.h>
#include<string.h>
#define N 101                              //先默认数组a比b长

void Init(char a[]);
char* fun(char a[],char b[],char c[]);

int main()
{
    char a[N+1]={0};
    char b[N+1]={0};
    char c[N+2]={0};

    Init(a);
    Init(b);

    printf("%s\n",fun(a,b,c));

    return 0;
}

void Init(char a[])              //输入函数
{
    char c=0;
    int i=1;

    a[0]='0';

    while ((c=getchar())!='\n')
        a[i++]=c;
}

char* fun(char a[],char b[],char c[])
{
    char* pa=a+strlen(a)-1;
    char* pb=b+strlen(b)-1;
    char* pc=c+N-2;
    int k;
    if((*pa-'0')<(*pb-'0'))                                               //修改部分   
    { 
         *pa+=10;
          
          if(*(pa-1)=='0')
          {
                for(k=1;*(pa-k)=='0';k++)
                    *(pa-k)='9';  
               
               *(pa-k)-=1;
          }

          else if(*(pa-1)!='0')
          {
              *(pa-1)-=1;
          }                       //pa变化
      
           *pc=((*pa-'0')-(*pb-'0'));
    }                                                 //  *pc=((*pa-'0')+(*pb-'0'));

       else if((*pa-'0')>=(*pb-'0'))
       { 
          *pc=((*pa-'0')-(*pb-'0'));
       }                                                       //*(pc-1)+=1;
       

       *pc+='0';                                                    // 每次一个运行后都同时向后推
       --pc;

        if (pa!=a)
       --pa;

     if (pb!=b)
         --pb;
   

    return pc+1;
}
搜索更多相关主题的帖子: color 久久 
2017-04-10 21:46
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 2楼 wp231957
附上我同学修改后的代码~天哪~竟然和w版的几乎一样~不要说我重复发帖啊~

程序代码:
#include<stdio.h>
#include<string.h>

#define N 101                              

void Init(char* a);
char* fun(char* a,char* b,char* c,char f);
char swap(char* a,char* b);

int main()
{
    char a[N+1]={0};
    char b[N+1]={0};
    char c[N+2]={0};
    char f=0;

    Init(a);
    Init(b);
    f=swap(a,b);  //确保被减数大于等于减数

    printf("%s\n",fun(a,b,c,f));
    return 0;
}

void Init(char* a)              //输入函数
{
    char c=0;
    int i=1;
    a[0]='0';
    while ((c=getchar())!='\n')  a[i++]=c;
}

char swap(char* a,char* b)
{
    char ret='+';
    char tmp[N+2];
    if(strlen(a)<strlen(b) || (strlen(a)==strlen(b) && strcmp(a,b)<0))
    {
        strcpy(tmp,a);
        strcpy(a,b);
        strcpy(b,tmp);
        ret='-';
    }
    return ret;
}
//此函数模拟字符计算2个大数的减法
//传入参数依次为 被减数  减数 差 结果符号
char* fun(char* a,char* b,char* c,char f)
{
    char* pa=a+strlen(a)-1;  //置于字符串尾部 下同
    char* pb=b+strlen(b)-1;
    char* pc=c+N-2;
    char* tpc=pc;  //用于去除前连0
    int flag1=0;
    int flag2=0;
    while(pa>=a)
    {
        if(*pa<*pb  || *pa-flag2-*pb<0)
        {
            flag1=1;
        }
        else flag1=0;
        *pc=*pa-'0'+flag1*10-(*pb-'0')-flag2+'0';
        flag2=flag1;
        pc--;
        if(pb>b) pb--;else *pb='0';  //传入函数前 需确保a>=b 这里处理的是减数没有了的情况
        pa--;
    }
    pc++;
    while(*pc=='0' && pc<tpc)
        ++pc;  //去除差的前连0

    *(--pc)=f;  //保存差的符号
    return pc;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-11 14:55
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 3楼 rjsp
这个把加法和减法一起做了~高!拜谢了啦~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-11 14:55
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 6楼 renkejun1942
真会开玩笑~你往这方面想会被w版揍的~那同学说其实是一个小问题~就是在原来的代码基础上改了一下~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-11 14:59
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 6楼 renkejun1942
认真看了一下~那同学是昨晚给我答复的~今天w版才回~不过看到注释也一模一样感觉有点不可思议~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-11 15:05
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 9楼 wp231957
哇~本来是发一个普通贴~原来还有这种稀奇事~

[此贴子已经被作者于2017-4-11 15:10编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-11 15:07
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 11楼 爱睡觉的猫
我也要花时间看代码~包括要还要顾及别的学习任务~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-31 14:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475979-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.101545 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved