当前位置:首页 » 编程语言 » c语言使用char数组实现数字相加
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言使用char数组实现数字相加

发布时间: 2022-10-22 20:52:33

A. c语言中,如何“利用字符数组实现两个大整数的加法”

#include <string.h>
#include <stdio.h>
void f1(char *a,char *b) //一个函数
{
char t[101];
if(strlen(a)<strlen(b)) //比较前的准备
{
t[101]=0;
strcpy(t,a); //把a中内容拷贝到字符串t中
strcpy(a,b);
strcpy(b,t); //以上三条实现a与b的交换
}
}
void f(char *t1,char *t)
{
int i,n;
n=strlen(t1); //n是字符串t1的长度
for(i=0;i<n;i++)
t[i]=t1[n-1-i]; //把t1中的内容赋给与它的下标对称的下标t中
t[n]='\0'; //t最后一个位置赋结束字符
}
void f2(char *b,int q,int l)
{
char t[101]; //定义一个字符数组
int i;
for(i=0;i<q-l;i++)
t[i]='0';
t[q-l]='\0';
strcat(b,t); //把t连接到b去除结束字符‘/0’的字符后,保持和字符串a长度一致,便于运算
}
void add(char *a,char *b,char *s,int q)
{
int i;
strcpy(s,a); //把字符串a拷贝到字符串s中
for(i=0;i<q;i++)
if(s[i]+b[i]>105) //判断两个数字的和是否大于十 ,若大于10考虑进位问题
{
s[i]+=(b[i]-58); //大于10进位,s[i]加上进位后的数字,运算后赋给s[i]
s[i+1]++; //s[i+1]进位加1,运算后赋给s[i]
}
else
s[i]+=(b[i]-48); //否则不进位,运算后赋给s[i]
}
void print(char *s)
{
int i,l;
l=strlen(s);
if(s[l-1]>'9'||s[l-1]<'0')
{
printf("1"); //打印1
for(i=l-2;i>=0;i--)
printf("%c",s[i]); //其余的原样输出
}
else
for(i=l-1;i>=0;i--)
printf("%c",s[i]); //直接输出
}

main()
{
char a[101],b[101],a1[101],b1[101],sum[101]={0};
int q,l;
printf("请输入大整数字符a\n ");
gets(a1); //输入字符a1
printf("请输入大整数字符b\n ");
gets(b1); //输入字符b1
f1(a1,b1);//调用函数f1
f(a1,a); //调用f
f(b1,b); //调用f
q=strlen(a); //q是字符串a的长度
l=strlen(b); //l是字符串b的长度
f2(b,q,l); //调用f2使a,b长度一致
add(a,b,sum,q); //调用add,运算a,b字符串的结果
printf("a+b=");
print(sum); //调用print函数
printf("\n");
}

我只把一些看起来需要注释的都注释了,一些特别简单的基础的·应该不用注释了,实际上只要多看一些代码,这些都是慢慢可以看懂得。

B. c语言把数字字符串中的数字相加的程序

代码如下:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main()

{

char str[100];

char buf[10];

int i;

int n = 0;

bool flag = 0;

int j = 0;

//gets(str);

scanf("%s", str);

for (i = 0; i != strlen(str); ++ i)

{

if (str[i] >= '0' && str[i] <= '9')

{

buf[j] = str[i];

j++;

flag = 1;

}

else if (flag)

{

n += atoi(buf);

memset(buf,0,10);//清空缓存

flag = 0;

j = 0;

}

}

printf("%s",buf);

printf("%d ", n);

}

(2)c语言使用char数组实现数字相加扩展阅读

(C语言)常见字符函数和字符串函数

1、strlen

功能:计算字符串长度,不包含’’

返回值:返回字符串的字符数

说明:strlen() 函数计算的是字符串的实际长度,遇到第一个’’结束;参数指向的字符串必须以 ’ ‘结束。函数返回值一定是size_t ,是无符号的。如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到’’停止。

sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。

2、strcpy

功 能: 将参数src字符串拷贝至参数dest所指的地址

返回值: 返回参数dest的字符串起始地址

说明:源字符串必须以’’结束。会将源字符串的’’拷贝到目标空间。目标空间必须可变。如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况,在编写程序时需特别留意,或者用strncpy()来取代。

C. C语言数组怎样求和,

先获取数组长度,然后用for循环,从数组中获取值进行累加求和。

#include

#include

int main()

{

int n;

int val;

int * a;

int sun = 0, i;

printf("请输入数组的长度:");

scanf("%d", &n);

printf(" ");

a = (int *)malloc(n * sizeof(int));//为数组a动态分配内存

for(i = 0; i < n; i++)

{

printf("请输入数组的第%d个元素的值:", i+1);

scanf("%d", &val);

printf(" ");

a[i] = val;

}

for (i = 0; i < n; i++)

{

sun+=a[i];//sun+=a[i]相当于sun=sun+a[i];

}

printf("sun = %d ",sun);

free(a);//释放a动态分配的内存

return 0;

}

(3)c语言使用char数组实现数字相加扩展阅读:

一个数组中的所有元素具有相同的数据类型(在C、C++、Java、pascal中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、字符串、数值等等)。可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量。

如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。

compact跟变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。

D. C语言数组相加

1,gets需要判断是否读取正确
2,思路:xyz+zyx 即求数字倒序然后相加

int main()
{
char buf[64];
int a = 0, sum = 0;
if(gets(buf) == NULL)
printf("gets error, %s\n);
a = strlen(buf);

for(int i = 0;a>1; --a, ++i)
{
sum = buf[i] + buf[a];
}
printf(sum, %s\n);
return 0;
}
没编译你试一下,主要是方法要正确,你的有点乱,得加点注释要不看起来麻烦
还有 你的:a[strlen(str)]='\0';是不是不对,a[strlen(str)-1]='\0'; ?

E. c语言大数的加法用数组char指针实现

做大数加法,首先要能保存大整数。C能提供的最大的整数类型也就是long long int了吧,还是有上限。用整数类型这条路不通。所以想到把大整数看作字符串(即char数组),一位数字就是数组的一个元素。数组能有多长?几万位不止,应付大数加法很轻松。
基本做法就是把两个加数各自存为字符串。(怎么把数字转换成字符?每个数字加'0'就行了。比如 '7'就是7+'0'。)然后从个位起逐位加。(加的时候把字符变回数字,'7'-'0'就是7。)算出来的结果再转成字符存到第三个数组的相应位里,遇到进位就把上一位加个1,简单的很。最后第三个字符串就是结果,用puts打印出来就行了。做的时候为了方便可能会把个位存在数组第一位,那样的话就倒序输出字符串就行了。
代码自己写。

F. 两个字符串型数组如何相加(C语言)

你可以把字符串分解吗,因为第一个字符被排除
所以如果你需要atof 可以这样用
float ff=atof(&a[1]);
是不是。
借贷关系 你就直接取就行了 比如char jd=a[0];等等

G. C语言实现100位以内大数的加法,只用char,数组,循环。

用两个char型字符串就可以了。测出长度,以长的为被加数,短的为加数。举例代码如下:

//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
#include"string.h"
intmain(void){
chara[102],b[102],*pl,*ps,ll,ls;
printf("Pleaseenter2integers... ");
scanf("%[0-9]%[0-9]",a+1,b+1);
if((ll=strlen(a+1))>(ls=strlen(b+1)))
pl=a,ps=b;
else{
pl=b,ps=a;
ll^=ls,ls^=ll,ll^=ls;
}
for(*pl=*ps='0';ls>0;ls--,ll--)
if((pl[ll]+=ps[ls]-'0')>'9')
pl[ll]-=10,pl[ll-1]++;
while(ll)
if(pl[ll]>'9')
pl[ll]-=10,pl[ll---1]++;
elsebreak;
printf("a+b=%s ",*pl=='0'?pl+1:pl);
return0;
}

H. c语言 利用数组实现加法

我测试过了,含有100这样带有0的数字的时候没有问题,从代码分析带0也不会有问题。
至于你说的两个加数位数不相同出错。问题出在下面几行:
for(i=0;(k[i]!='\0'||b[i]!='\0');i++)
{
if(sign==1)
{
j[i]=k[i]+b[i]-95;
sign=0;
}
else
j[i]=k[i]+b[i]-96;
上面的代码片段。for循环的第二个表达式成立是或关系。如果其中一个加数位数不够,后面的“-95”和“-96”将多减去一个48,所以由char型转到int型的时候就出错了。
建议你使用strlen求一下两个被加数长度。将位数小的高位用0补齐就行了。

I. C语言 数字字符相加怎么实现

#include<stdio.h>
voidmain(){charas[]={"11"},bs[]={"1"};inta,b,c,i;
i=a=0;while(as[i]!=0){a*=10;a+=as[i]-'0';i++;}
i=b=0;while(bs[i]!=0){b*=10;b+=bs[i]-'0';i++;}
c=a+b;
printf("%s+%s=%d ",as,bs,c);
}