• 大数减法


    #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;
    }
  • 相关阅读:
    关于ViewPager、ViewFilpper、ViewFlow三种实现水平向滑动方式的比较
    php 使用curl模拟登录discuz以及模拟发帖
    php 使用curl模拟登录人人(校内)网
    PHP PDO函数库详解
    比CMD更强大的命令行WMIC
    强大的命令行工具wmic
    wmic 命令的一个汇总,功能很强大
    Oracle 11g default profile 默认启用密码过期180天 ORA-28001错误处理
    Oracle 11g密码过期问题解决方案
    SQLPlus 在连接时通常有四种方式
  • 原文地址:https://www.cnblogs.com/Asurudo/p/9427262.html
Copyright © 2020-2023  润新知