• 关于高精度运算


    ##高精度是一种很巧妙的方法呀。
    大体思路是,将两个很大的整数分别存放于char数组a,b中,分别计算数组长度。再将对应的位数转化为整形相加,如‘2’-‘0’得到2,因为数字字符的阿斯克吗是连续的。个位和个位相加存入另一个int类型的数组中,最后得到一个每个元素都可能比10大的数,最后进位求解。。由于不确定哪个数组比较长(对应的正数更大位数更多),如果单纯地对应相加可能就是千位和个位相加,所以相加就会很麻烦,因为相加进位必须是相同位数相加,但是在上面的代码中我也用了较为繁琐的代码实现了这一问题(尽管其中有些许bug)。
    但是只要存入字符数组时以个位,十位,百位这样的顺序放入求解过程就会方便许多。因为这样可以一一对应相加,就像这样string str1,str2;

    int a[250],b[250],len;   //数组的大小决定了计算的高精度最大位数  
      int i;  
      memset(a,0,sizeof(a));  
      memset(b,0,sizeof(b));  
      cin>>str1>>str2;   //输入两个字符串  
      a[0]=str1.length();  //取得第一个字符串的长度  
      for(i=1;i<=a[0];i++)  //把第一个字符串转换为整数,存放在数组a中  
        a[i]=str1[a[0]-i]-'0';  ///////////////这就是倒序输入!!
      b[0]=str2.length();   //取得第二个字符串长度  
      for(i=1;i<=b[0];i++)   //把第二个字符串中的每一位转换为整数,存放在数组B中  
        b[i]=str2[b[0]-i]-'0';  ////////////////这就是倒序输入!!!
      len=(a[0]>b[0]?a[0]:b[0]);   //取两个字符串最大的长度  
    原文代码链:https://blog.csdn.net/fanyun_01/article/details/79967170
    (!!!!!!!看正确的点这个链接!通俗易懂)
    		也可以这样倒序输入`在这里插入代码片`char a1[100],b1[100];     
    
    int a[100],b[100],c[100],lena,lenb,lenc,i,x;    
    memset(a,0,sizeof(a));     
    memset(b,0,sizeof(b));     
    memset(c,0,sizeof(c));                                                  
    gets(a1);  //先存在两个字符数组中
    gets(b1);      
    ena=strlen(a1);   
     lenb=strlen(b1);   
     for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48;//倒序读入进另外的数组
    for (i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48;
    
  • 相关阅读:
    工作杠杆
    AngularJS 自定义指令directive 介绍
    CentOS卸载OpenJDK并安装Sun JDK
    jQuery Datatable 表格插件
    ZTree 使用范例
    jQuery UI 实例 – 切换(Toggle)
    curl 抓取页面信息
    报警平台
    PHP imagechar() 图形验证码 字体太小问题
    Discuz!在线中文分词服务
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12679643.html
Copyright © 2020-2023  润新知