高精度减法

#include
#include
#include
#include
#include
using namespace std;
char s[10100],ss[10100];
int a[10100],b[10100],s[10100];
int len;


int main()
{
    cin.getline(s,10100);
    cin.getline(ss,10100);
    int l1 = strlen(s);    //字符串长度
    int l2 = strlen(ss);
    int flag = 0;         //记录结果的正负

 

    if (l1< l2||(strcmp(s,ss) < 0&&l1==l2))    //这个比较重要是来判断前后两数的大小的  
    {                                           //不然一个小的数减一个大的数是大于零的就尴尬了
        flag = 1; //这里是把正负记录下来  
        for (int i = l2 - 1 ; i >= 0 ; i--)    //倒过来输入
            a[l2 - i - 1] = ss[i] - '0';      //将字符串里的字符转换为数字
        for (int i = l1 - 1 ; i >= 0 ; i--)
            b[l1 - i - 1] = s[i] - '0';
    }
    else
    {
        for (int i = l1 - 1 ; i >= 0 ; i--)   //同理,倒过来输入
            a[l1 - i - 1] = s[i] - '0';
        for (int i = l2 - 1 ; i >= 0 ; i--)
            b[l2 - i - 1] = ss[i] - '0';
    }
    if (l1 > l2)
        len = l1;             //len赋值为其中大的数
    else
        len = l2;
    for (int i = 0 ; i < len ; i++)
    {
        s[i] = a[i] - b[i];     //运算
        if (s[i] < 0)          //如果减得多了
        {
            s[i+1]-=1;         //向前要一位
            s[i]+=10;          
        }
    }

    while (s[len - 1] == 0 && len>1) len--;   //用while去掉该数组前面的零
    if (flag == 1) printf("-");     //如果结果是负的,先输出一个负号
    for (int i = len - 1 ;i >= 0 ;i--)   //再输出结果
        printf("%d",s[i]);
    printf("\n");   //换行
}                           //高精度减法你懂了吗?

//注:代码非本人所写,希望它能让你更理解高精度减法!

你可能感兴趣的:(c++,c语言)