精度计算-大数乘小数

语法:mult(char c[],char t[],int m);

参数:

  c[]: 被乘数,用字符串表示,位数不限

  t[]: 结果,用字符串表示

  m: 乘数,限定10以内

返回值: null

注意:  

  需要 string.h

源程序:  

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void mult(char c[],char t[],int m)
{
    int i,l,k,flag,add=0;
    char s[100];
    l=strlen(c);
    for (i=0;i<l;i++)
        s[l-i-1]=c[i]-'0'; //逆置数组,并转化成数字
    for(i=0;i<l;i++)
    {
        k=s[i]*m+add;//按位想乘
        if(k>=10) //乘积大于10 就加到下一位
        {
            s[i]=k%10;
            add=k/10;
            flag=1;
        }
        else
        {
            s[i]=k;
            flag=0;
            add=0;
        }
    }
    if(flag)
    {
        l=i+1;
        s[i]=add;
    }
    else
        l=i;
    for(i=0;i<l;i++)
        t[l-1-i]=s[i]+'0';//逆置回来
    t[l]='\0';
}
int main()
{
    char bignum[100]={0};
    char anwser[100]={0};
    int smallnum=0;
    printf("please enter a big num,and a small num \n");
    scanf("%s %d",bignum,&smallnum);
    mult(bignum,anwser,smallnum);
    printf("the Anwser is %s\n",anwser);
    return 0;
}

本文转自博客园xingoo的博客,原文链接:精度计算-大数乘小数,如需转载请自行联系原博主。

时间: 2024-10-11 07:40:31

精度计算-大数乘小数的相关文章

精度计算-大数阶乘-ACM常用算法

语法  int result=factorial(int n); 参数: n: n 的阶乘 返回值: 阶乘结果的位数 注意:     本程序直接输出n!的结果,需要返回结果请保留long a[]  inlclude <math.h> 源程序:   int factorial(int n) { long a[10000]; int i,j,l,c,m=0,w; a[0]=1; for(i=1;i<=n;i++) { c=0; for(j=0;j<=m;j++) { a[j]=a[j]

精度计算-乘法(大数乘大数)

语法:mult(char a[],char b[],char s[]); 参数: a[]: 被乘数,用字符串表示,位数不限 b[]: 乘数,用字符串表示,位数不限 t[]: 结果,用字符串表示 返回值: null 注意:     空间复杂度为 o(n^2)   需要 string.h 源程序:     #include <iostream> #include <string.h> using namespace std; void mult(char a[],char b[],ch

大数与小数相乘算法

#include <stdio.h> #include <string.h> /************************************************************************/ /* 功能:大数乘以小数 /* 参数:source:字符型数组,作为被乘数,位数小于500位 /* result:存放计算结果,并返回 /* m:作为乘数,限定m的取值范围为:小于1000000 /******************************

sql server 2008 r2-SQL去计算一位小数的问题

问题描述 SQL去计算一位小数的问题 表字段为int类型 CASE WHEN MyRequiredPeriod IS NULL THEN '-' ELSE CAST(ROUND(MyRequiredPeriod/3600,1) AS NVARCHAR(50)) END,这样取出来的小数后面带0,怎样才让能让这个字段取得两位小数呢 解决方案 http://blog.itpub.net/22392018/year-201405-list-1/ 解决方案二: CASE WHEN MyRequiredP

javascript解决小数的加减乘除精度丢失的方案_javascript技巧

原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1 = 0.2999999999等,下面列出可以完美求出相应精度的四种js算法 function accDiv(arg1,arg2){ var t1=0,t2=0,r1,r2; try{t1=arg1.toString().split(".")[1].length}catch(e){} t

javascript小数精度丢失的完美解决方法_javascript技巧

原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1 = 0.2999999999等,下面列出可以完美求出相应精度的四种js算法 function accDiv(arg1,arg2){ var t1=0,t2=0,r1,r2; try{t1=arg1.toString().split(".")[1].length}catch(e){} t

由浮点数的精度问题引出设计问题

本文由ruby-china的一篇帖子"由小数的精度问题引出设计问题"引出,帖子也是我发的,在查看回复的时候学到了不少内容,有了一点感悟,所以就想总结一下. 首先声明本文选用的编程语言为ruby,运行环境是ubuntu. 在编写财务,电子商务之类应用的时候,经常会碰到小数,小数乘.除.加.减的场景. 大多数语言表示小数,都有单精度float,双精度double,还有一个更加精确的decimal,无论是哪一种,都统称为浮点数. 浮点数是一个近似的数值,不是精确的数值.至于为什么不精确,这个

java中Double类型的运算精度丢失的问题 (小数点多出99999999999999)

 在使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1. 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情. 这样的情况通过double计算出来的结果去和0比较大小,尤其是有小数点的时候,经常会因为精度丢失而导致程序处理流程出错.  首先贴一个使用的代码: /** * 将double类型数据转为字符串(如将18.4转为1840,如果需要1840.0,把int强转去掉即可) * @par

代码之谜(五)- 浮点数(谁偷了你的精度?)

如果我告诉你,中关村配置最高的电子计算机的计算精度还不如一个便利店卖的手持计算器,你一定会反驳我:「今天写博客之前又忘记吃药了吧」. 你可以用最主流的编程语言计算 0.2 + 0.4,如果你使用的是 Chrome.FireFox.IE 8+,可以按 F12 键,然后找到 「控制台」,输入上面的 表达式 0.2 + 0.4,回车. 然后再用最简陋的计算器(如果你没有手持计算器没关系,手机.电脑都自带一个计算器,打开"运行",输入 calc,回车) 再计算一下刚才的 算式 0.2 + 0.