用C语言如何实现大数据的加法,且是包括整数和小数的运算?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言如何实现大数据的加法,且是包括整数和小数的运算?相关的知识,希望对你有一定的参考价值。

刚写的 看看符合你要求不

#include <stdio.h>
#include <string.h>
typedef struct 

int a[200];
int b[200];
NUM;
void format_num(NUM *n, char *str)

char *p_dot = NULL;
char *p;
int i = 0;
memset(n, 0, sizeof(*n));
for(p = str; *p; p ++)
if(*p == \'.\') break;
if(*p)p_dot = p;

p --;
while(p >= str)

n->a[i++] = *p-- - \'0\';

p = p_dot;
if(p == NULL) return;
i = 0;
p++;
while(*p)
n->b[i++] = *p++ - \'0\';


void print_num(NUM *n)

int i, j;
for(i = sizeof(n->a)/sizeof(n->a[0]) - 1; i>=0; i --)
if(n->a[i]) break;
if(i >= 0)
for(;i>=0; i --)
printf("%d",n->a[i]);
else printf("0");
for(i = sizeof(n->b)/sizeof(n->b[0]) - 1; i>=0; i --)
if(n->b[i]) break;
if(i>=0)

printf(".");
for(j = 0; j <= i; j ++)
printf("%d", n->b[j]);



void add(NUM *a, NUM *b, NUM*c)

int t = 0;
int i;
for(i = sizeof(a->b)/sizeof(a->b[0]) - 1; i>=0; i --)

t += a->b[i] + b->b[i];
c->b[i] = t%10;
t /= 10;

for(i = 0; i < sizeof(a->a)/sizeof(a->a[0]); i ++)

t += a->a[i] + b->a[i];
c->a[i] = t%10;
t /= 10;



int main()

char sa[100], sb[100];
NUM a,b,c;
scanf("%s%s", sa,sb);
format_num(&a, sa);
format_num(&b,sb);
print_num(&a);
printf(" + ");
print_num(&b);
printf(" = ");
add(&a,&b,&c);
print_num(&c);
printf("\\n");

return 0;
参考技术A 用数组或者指针。。

ZZNUOJ_用C语言编写程序实现1153:大整数加法(附完整源码)

题目描述

比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。

输入

输入数据有多组。首先输入一个整数T,表示有T组输入。
 
每组输入有两行,每行一个大整数。每个整数最多1000位。没有负数输入。

输出

对于每组输入,输出两个整数的和,单独占一行。

样例输入

2
1 2
112233445566778899 998877665544332211

样例输出

3
1111111111111111110

完整源码:

#include<stdio.h>
#

以上是关于用C语言如何实现大数据的加法,且是包括整数和小数的运算?的主要内容,如果未能解决你的问题,请参考以下文章

ZZNUOJ_用C语言编写程序实现1153:大整数加法(附完整源码)

JS中如何实现小数的加减

c 语言中除号仅用于整数间吗?

为何js计算带有小数的加法的时候会出现误差?

为何js计算带有小数的加法的时候会出现误差?

C语言中如何将double型数据转换为数组?