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;
    }
  • 相关阅读:
    java.io.EOFException ValueOperations.increment()操作后,获取值时有的bug
    使用maven profile指定配置文件打包适用多环境
    关于3Q大战和反垄断
    在ECUG2010上的演讲稿
    让Windows7在启动时自动挂载虚拟磁盘
    也谈并行计算(一)C#版的Parallel.For实现
    给.NET的string类添加一个命令行参数分解的扩展
    顺序表 code
    很高兴开始博客之旅 code
    (原)前端知识杂烩(css系列)
  • 原文地址:https://www.cnblogs.com/Asurudo/p/9427262.html
Copyright © 2011-2022 走看看