高精度加法(C语言实现)

-

高精度,是学C语言漫长的路上必须要学的一类程序
那么,先来讲一下高精度加法吧!


源代码&注释

//小程序版
#include<stdio.h>
#include<string.h>
char s[10100],ss[10100];
int a[10100],b[10100];
int len;

void jia()     //自定义函数"jia"(名字low了一点(好像不是一点,但容易理解不是吗)) 
{
    int l1 = strlen(s);     //"strlen"是一个计算字符串长度的函数 
    int l2 = strlen(ss);    //将输入的两个字符串的长度赋值给l1,l2
    if (l1 > l2) 
        len = l1;      //将len赋值为l1,l2中大的那个 
    else 
        len = l2;
//      for (int i = 0 ; i <= len ; i++)  //清零(这里for循环和下面三句memset都为将字符串清零 ) 
//          a[i] = b[i] = c[i] = 0;
    memset(a,0,sizeof(a));    //清零too(只能清零,不能干别的) 
    memset(b,0,sizeof(b));    //这是清零函数(字符串) 
                                           //两个for循环是将输入的两个字符串倒过来
    for (int i = l1 - 1 ; i >= 0 ; i--)    //再将字符串里的字符转换为数字赋值给a,b整型数组 
        a[l1 - i - 1] = s[i] - '0';        //但为什么大数要用字符串存呢?
    for (int i = l2 - 1 ; i >= 0 ; i--)    //因为大数太大,用任何整型变量都存不下 
        b[l2 - i - 1] = ss[i] - '0';       //为什么要把字符串倒过来赋值呢? 
                                    //因为大数与大数是一位一位运算的,还要涉及进位等 
    for (int i = 0 ; i < len ; i++)
    {
        a[i] = a[i] + b[i];    //运算 
        a[i+1]+= a[i] / 10;    //如有进位,在后一位上加上 
        a[i] = a[i] % 10;      //原来那一位减掉进位了的 
    }
    if (a[len] != 0) len++;    //如果有进位就多显示一位(这句话很重要) 
    for (int i = len - 1 ;i >= 0 ;i--)  //输出结果 
        printf("%d",a[i]);
    printf("\n");
}                              //高精度加法你懂了吗?

int main()
{
    printf("高精度加法(By STY)\n\n");
    printf("退出请按“Ctrl+Z”(在键盘上),并按回车,谢谢使用!\n"); 
    printf("请输入两个数字:\n");
    printf("数字:(用空格隔开)\n");
    while (scanf("%s%s",s,ss)!=EOF)
    {
        printf("\n结果:\n"); 
        jia();     //引用高精度加法函数
        printf("\n\n");
        printf("高精度加法(By STY)\n\n"); 
        printf("退出请按“Ctrl+Z”(在键盘上),并按回车,谢谢使用!\n");
        printf("请输入两个数字:\n");
        printf("数字:(用空格隔开)\n");
    }
    return 0;
}

思路

这就是高精度加法的整段代码,
思路就是:因 int 变量最大只能存2147483647 2 32 1 ) 这么大的数,存不了更大的数了,
所以只能把一个大数一位一位存入数组中,并进行相应的运算,
当然还有进位等一系列麻烦的问题,使得高精度运算是个难题
这些在上面的”源代码&注释”中解决了这些问题,
希望大家在看了这篇文章后理解和会使用高精度加法的运算了


希望大家喜欢这篇文章!!!
如有问题请留言,谢谢!!!

>>>我的博客<<<

猜你喜欢

转载自blog.csdn.net/sty20030818/article/details/81516863