zoukankan      html  css  js  c++  java
  • 大数减法

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdbool.h>
    
    #define MaxSize 1000
    
    bool _TwoSubStrcmp(char* Minuend,char* Subtrahend)
    {
        int MinuendLen = strlen(Minuend);
        int SubtrahendLen = strlen(Subtrahend);
        
        if(MinuendLen > SubtrahendLen)
            return true;
        else if(MinuendLen == SubtrahendLen)
            return (strcmp(Minuend,Subtrahend)>0);
        else if(MinuendLen < SubtrahendLen)
            return false;
    }
    
    char *_TwoBigNumSub(char *InputMinuend,char *InputSubtrahend)
    {
        char *Result = malloc(MaxSize*sizeof(char));
        int ResultEnd = 0;
        
        int MinuendLen = strlen(InputMinuend);
        int SubtrahendLen = strlen(InputSubtrahend);
        
        int Minuend[MaxSize];
        int Subtrahend[MaxSize];
        memset(Minuend,0,sizeof(Minuend));
        memset(Subtrahend,0,sizeof(Subtrahend));
        
        //reverse to store
        int InputSubend,SubendEnd;
        for(InputSubend = MinuendLen-1,SubendEnd = 0;InputSubend >= 0;InputSubend --)
        {
            Minuend[SubendEnd ++] = InputMinuend[InputSubend] - '0';
        }
        for(InputSubend = SubtrahendLen-1,SubendEnd = 0;InputSubend >= 0;InputSubend --)
        {
            Subtrahend[SubendEnd ++] = InputSubtrahend[InputSubend] - '0';
        }
        
        //Sub && Abdicate
        int Abdication = 0;
        for(SubendEnd = 0;SubendEnd < MaxSize;SubendEnd ++)
        {
            Minuend[SubendEnd] -= Abdication;
            if(Minuend[SubendEnd] < Subtrahend[SubendEnd])
            {
                Minuend[SubendEnd] += 10;
                Abdication = 1;
            }
            else
            {
                Abdication = 0;
            }
            Subtrahend[SubendEnd] = Minuend[SubendEnd] - Subtrahend[SubendEnd];
        }
        
        //store to return
        //0 screening
        for(SubendEnd = MaxSize-1;SubendEnd>=0 && Subtrahend[SubendEnd]==0;SubendEnd --)
            ;
        if(SubendEnd >= 0)
        {
            for( ;SubendEnd >= 0;SubendEnd --)
            {
                Result[ResultEnd++] = Subtrahend[SubendEnd] + '0';
            }
        }
        else
        {
            Result[ResultEnd++] = '0';
        }
        Result[ResultEnd] = '';
        return Result;
    } 
    
    char *TwoBigNumSub(char *InputMinuend,char *InputSubtrahend)
    {
        char *TempResult;
        char *Result = malloc(MaxSize*sizeof(char));
        int ResultEnd = 0;
        int TempResultEnd = 0;
        
        if(_TwoSubStrcmp(InputMinuend,InputSubtrahend)==true)
        {
            TempResult = _TwoBigNumSub(InputMinuend,InputSubtrahend);
        }
        else
        {
            Result[ResultEnd++] = '-';
            TempResult = _TwoBigNumSub(InputSubtrahend,InputMinuend);
        }
        
        for(TempResultEnd = 0;TempResultEnd < MaxSize;TempResultEnd ++)
        {
            Result[ResultEnd++] = TempResult[TempResultEnd];
        }
        free(TempResult);
        return Result;
    }
    
    int main()
    {
        char InputMinuend[MaxSize] = "5";
        char InputSubtrahend[MaxSize] = "692355225511444222555";
        
        char *Result = TwoBigNumSub(InputMinuend,InputSubtrahend);
        puts(Result);
        return 0;
    }
  • 相关阅读:
    YII 数据插入 save() 方法
    springboot md5 加密
    yii 在model中实现连表查询
    yii 获取登录用户的信息
    yii 在GridView中怎样添加html代码
    yii 返回json数据
    Qt 错误:QMainWindow: No such file or directory 解决方法
    Qt 错误:QtGui/QApplication在Qt5没有这个文件
    VMware Ubuntu 虚拟机安装 VMwareTools (VMware虚拟机如何与主机互相复制文件)
    VMware15、Ubuntu19.04、安装教程(图文步骤)
  • 原文地址:https://www.cnblogs.com/Asurudo/p/9427262.html
Copyright © 2011-2022 走看看