for-求问高精度算法内语句的意思?

问题描述

求问高精度算法内语句的意思?
这段程序中 语句

if(b1[0]==45) { an--; fa=-1;ai=0;} /*判断数组的符号 */

if(b2[0]==45) { bn--; fb=-1;bi=0;} 是什么意思求大神讲解谢谢

#include

#include

#include

#include

int anbnfa=1fb=1; /* 把anbnk设为全局变量an纪录第一个高精度数组的位数bn纪录第二个高精度数组的位数k纪录输出结果的位数*/

char b1[250] b2[250]; /*纪录需要计算的两个高精度数据 /

int subtraction(int a[]int b[]int q);

void input(int a1[]int a2[]) /函数input为输入函数用来纪录两个待计算的高精度数据以数组首地址为参数.以实现返回两个高精度数据*/

{

int iai=1bi=1;  scanf ( ""%s%s"" b1 b2 );                      /*输入两个高精度数据 */  an = strlen( b1 );                             /*an纪录b1的位数 */  bn = strlen( b2 );                            /*bn纪录b2的位数 */  if(b1[0]==45) { an--; fa=-1;ai=0;}           /*判断数组的符号 */  if(b2[0]==45) { bn--; fb=-1;bi=0;}  for (i=0; i<an; i++ai++) {a1[i]=b1[an-ai]-'0'; printf(""%d""a1[i]);}     /*把字符形数据b1转为整数形数据同样用数组纪录 */  for (i=0; i<bn; i++bi++) a2[i]=b2[bn-bi]-'0';    /* 同上  */  return;  

}

void addition(int a[]int b[]int q) /*高精度加法运算*/

{

int ic[251]={0}k;

if(fa*fb>0||q)

{

if(an>bn) k=an;

else k=bn; /*用k纪录结果的最小位数*/

for(i=0;i {
c[i]=a[i]+b[i]+c[i];
c[i+1]=(int)c[i]/10;
c[i]=(int)c[i]%10;
} /*高精度加法运算过程*/
if(c[k]) k++; /*判断最后结果的位数*/
if(fa for(i=k-1;i>=0;i--) printf(""%d""c[i]); /*输出结果*/

return;

}

else subtraction(ab1);

return;

}

int subtraction(int a[]int b[]int q) /*高精度减法运算*/

{

int if=0c[251]={0}k;

if(fa*fb>0||q)

{

if(an>bn) k=an;

else /*用k纪录结果的最大位数*/

{ k=bn;

for(i=k;a[i]<=b[i]&&i>=0;i--)

if(a[i]<b[i]) f=1; /*f纪录结果符号*/

}

    if(!f)                                /*高精度减法运算过程*/       for(i=0;i<k;i++)       {           if(a[i]<b[i])           {     a[i+1]--;                 a[i]+=10;          }          c[i]=a[i]-b[i];        }      else                                         /*当a<b时的处理*/        for(i=0;i<k;i++)          {             if(b[i]<a[i])             {   b[i+1]--;                b[i]+=10;             }             c[i]=b[i]-a[i];           }      while(!c[k-1]&&k>1) k--;                  /*判断最后结果的位数*/      if(q&&(fa>0&&f||fa<0&&!f)||fa>0&&(fb>0&&!f||f&&!q)) printf(""-"");                      /*如果f为真是输出负号*/      for(i=k-1;i>=0;i--) printf(""%d""c[i]);      return 0;  }  else addition(ab1);  

}

void multiplication( int a[] int b[]) /*高精度乘法运算*/

{

int i j c[501] = {0}k;

k = an + bn - 1; /*用k纪录结果的最大位数*/

for(i = 0; i < an; i++) /*高精度乘法运算过程*/

for(j = 0;j < bn; j++)

{

c[i+j] = a[i] * b[j] + c[i+j];

c[i+j+1] = c[i+j] / 10 + c[i+j+1];

c[i+j] = c[i+j] % 10;

}

while(!c[k]) k--; /*判断最后结果的位数*/

if(fa*fb for(i = k; i >= 0; i--) printf(""%d""c[i]); /*输出结果*/

}

main()

{

int a[250]={0}b[250]={0};

input(ab);

printf(""n%s+%s=""b1b2);addition(ab0);

printf(""n%s-%s=""b1b2);subtraction(ab0);

printf(""n%s*%s=""b1b2);multiplication(ab);

getchar();

}

解决方案

说白了,这里高精度计算用字符串表示数字,而用人手算的方法模拟计算的思路。
45就是ascii代码的'0'

解决方案二:
先自己看看,哪儿看不懂了提出来问,直接发代码很少有人能完全看完后给你解释

解决方案三:
45是ASCII的'-'。
b1和b2是两个字符串,用来模拟两个大数字(高精度数字),如果首位是'-'的话说明这个数字是负数.
fafb是计算时的符号表示所以标成-1;
anbn是字符串长度因为已经盘断了首位是'-'.所以长度相应的就-1了
aibi是数字的首位置个人感觉在判断负号后应该置为1而非0

解决方案四:
if(b2[0]==45) { bn--; fb=-1;bi=0;} 是什么意思求大神讲解谢谢 //和第一排一样不过是另一个数

解决方案五:
高精度计算,就是模拟笔算的过程

时间: 2024-12-22 21:15:42

for-求问高精度算法内语句的意思?的相关文章

求问怎么写sql语句来表示按数量计算?

问题描述 求问怎么写sql语句来表示按数量计算? 这三张表格可以写出sql吗可以按数量进行查询 解决方案 SELECT count(t.counts),max(t.type) FROM table t GROUP BY t.year,t.type; 其中: counts字段:表示保存数量的字段 type字段:区分配件类型的字段(配件A.配件B) 希望对你有帮助! 解决方案二: 求以下SQL语句怎么写

求问:使用xpath语句定位一个含有某个字节点的节点

问题描述 求问:使用xpath语句定位一个含有某个字节点的节点 如题: 想获取含有table的abc节点,从外层定位的! 不要说//table/ancestor::abc 和 //table/parent::abc 思路://abc[包含table字节点] 感谢各位了! 解决方案 xpath没办法通过子节点直接获取父节点,你要先找到子节点,然后再取父节点 解决方案二: vb.net中用Xpath遍历子节点的问题

技术-求问:这个sql语句有什么错误,放在Oracle Sql Developer上运行错误,求解

问题描述 求问:这个sql语句有什么错误,放在Oracle Sql Developer上运行错误,求解 "" select t3.dwnvl(t4.adhf0)nvl(t4.ayhf0)nvl(t4.azl0)nvl(t4.cdhf0)nvl(t4.cyhf0)nvl(t4.czl0)""+ from ""+ (select '便民中心' as dw from dual union select '纪委' as dw from dual unio

加密-求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该

问题描述 求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该 求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该 解决方案 加密算法的强度不是取决于算法是否公开,而是取决于算法本身在数学上是否有解,以及密钥的强度. 所以aes这种工业级的加密算法,在相当的时间和应用范围内肯定是没有问题的. 解决方案二: 对称加密算法 对称加密算法用来对敏感数据等信息进行加密,常用的算法包括: DES(Data Encryption Standard):数据加密

数据库-新人求问关于sql语句的问题

问题描述 新人求问关于sql语句的问题 alter table 数据类型 add constraint check6 check (范围>'0' and 范围<'100') 执行的时候提示错误说:"消息 547,级别 16,状态 0,第 1 行 ALTER TABLE 语句与 CHECK 约束"check6"冲突.该冲突发生于数据库"数据",表"dbo.数据类型", column '范围'. 解决方案 关于sql 语句的求孤

求问算法导论中一个非常简单的对数问题

问题描述 求问算法导论中一个非常简单的对数问题 求问算法导论中一个非常简单的对数问题.额,各位不要笑话啊. 请问这两个对数是如何推出相等的啊,用的是哪个公式啊? 只记得这个公式了.... 解决方案 解决方案二: begin{align} ln(3^{log_4^n}) & = ln(n^{log_4^3}) log_4^ncdot ln(3) & = log_4^3cdot ln(n) frac{ln(n)}{ln(4)}cdot ln(3) & = frac{ln(3)}{ln(

字符串-java问题 17~20行的代码不能运行,也就是不能进行a==Mon[i]这个语句,求问是什么原因

问题描述 java问题 17~20行的代码不能运行,也就是不能进行a==Mon[i]这个语句,求问是什么原因 import java.util.Calendar; import java.util.Date; public class Date { public static void main(String[] args) { //以下代码是用来显示系统当前月份的第一天是星期几的 Calendar currentCal = Calendar.getInstance(); currentCal.

求问sql语句如何在添加中使用聚合函数

问题描述 求问sql语句如何在添加中使用聚合函数 设1表中有A.B两列,我想添加一组数据(c,d)进去(并没有C的值),其中c=A列最大值+1, 如何写sql语句? Ps.我知道如果只添加C可以这么写: insert into 1(A) select max(A)+1 from 1; 但是我想同时将数据d添加进去 解决方案 其实你已经知道方法了. insert into 1(A,B) select max(A),d from test; 在这里d要是一个常量值或者是test表的字段: 解决方案二

c语言-求问读过TCPL的大神,关于C语言switch语句问题

问题描述 求问读过TCPL的大神,关于C语言switch语句问题 The C Programming Language书中3.4 Switch 开头这么写到: 3.4 Switch The switch statement is a multi-way decision that tests whether an expression matches one of a number of constant integer values, and branches accordingly. swi