前几天在网上看到这样一个题目 “两个数相乘,小数点后的位数没有限制,写一个高效算法“,在网上搜集到一些想法,感觉”先做大数乘法,然后再给结果加小数点“这种方法更好一些,用c语言实现了,分享给大家。如果大家有更好的方法,欢迎一起交流。
#include<stdio.h>
#include<string.h>
void longmulti(const char *a, const char *b, char *c);
void decimalmulti(char *a, char *b, char *c);
int main(void)
{
char c[1024];
decimalmulti("3.1415926", "3.14", c);
printf("3.1415926 * 3.14 = %s\n\n", c);
return 0;
}
void longmulti(const char *a, const char *b, char *c)
{
int i, j, k, n, carry;
int len_a, len_b;
i = j = k = 0;
//如果a,b中有一个是0,则整个运算的结果为0
if(!strcmp(a, "0") || !strcmp(b, "0"))
{
c[0] = '0';
c[1] = '\0';
return;
}
//判断运算结果的正负号
if(a[0] == '-')
{
i = 1;
k = !k;
}
if(b[0] == '-')
{
j = 1;
k = !k;
}
//如果出现了符号,先将符号过滤掉
if(i |