现在的位置: 首页 > 综合 > 正文

乘法——(大数乘小数)

2018年04月19日 ⁄ 综合 ⁄ 共 727字 ⁄ 字号 评论关闭

c[]:被乘数,用字符串表示,位数不限
t[]:存储结果,用字符串表示

m:乘数,可以限定在任何数范围内,不过要修改下面一处代码 

#include<stdio.h>
#include<string.h>
void mult(char c[],char t[],int m);

int main()
{
  char c[]="123456789";//测试数据
  char t[20];
  int m=6;
  mult(c,t,m);
  int i=0;
  while(*(t+i))
  {
  printf("%c",*(t+i));
  i++;
  }
  return 0;
}

void mult(char c[],char t[],int m)
{
  int i,l,k,flag,add=0;
  int s[100];//char类型也可以
  l=strlen(c);//被乘数的长度,string.h头文件里面有,计算字符串长度
  for(i=0;i<l;i++)
  s[l-i-1]=c[i]-'0';//把字符转换为数字 低位字符转换到数字数组高位
  for(i=0;i<l;i++)
  {
  k=s[i]*m+add;//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要注意边界问题
  {
  l=i+1; 
  s[i]=add;
  }
  else
  l=i;
  for(i=0;i<l;i++)
  t[l-i-1]=s[i]+'0';
  t[l]='\0'; 
}
【上篇】
【下篇】

抱歉!评论已关闭.