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

数字相加可扩展性c语言

发布时间: 2022-05-08 05:00:13

1. c语言如何实现多对大数相加

思路:

1.输入xxxx+xxxxxx,已‘+’分割成两个子串。

2.逆序两个子串,末位变成首位对齐,按位相加,大于10则向后位进一。

3.需要考虑到两个数长度不同的情况。

4.再把最后的结果逆序输出,就得到了最终正向相加的结果。

思路实现代码如下(在vc6.0中编译通过):

#include<stdio.h>
#include<string.h>
voidreverse(char*s,intlen);
char*addLargeNumber(char*s1,char*s2);
intmain(intargc,charconst*argv[])
{
charstr[100];
intlen[10];//截取的每个子串的长度
scanf("%s",str);
char*sep="+-*/";
char*p=strtok(str,sep);
char*s=p;
char*k=p;
len[0]=strlen(p);
reverse(p,len[0]);
puts(p);
while(1)
{
s=strtok(NULL,sep);
if(s==NULL)
{
break;
}
len[1]=strlen(s);
reverse(s,len[1]);
puts(s);
k=s;//
}
printf("accesstoaddLargeNumber ");
p=addLargeNumber(p,k);
len[2]=strlen(p);
reverse(p,len[2]);
puts(p);
return0;
}
//反转一个字符串
voidreverse(char*s,intlen)
{
chartemp;
inti;
for(i=0;i<len/2;i++)
{
temp=s[i];
s[i]=s[len-1-i];
s[len-1-i]=temp;
}

}
//接收两个字符串,把长度小的加到长度大的串上,返回相加后的串
char*addLargeNumber(char*s1,char*s2)
{
char*p=s1;
char*q=s2;
chark;
inti;
printf("子串1的长度=%lu子串2的长度=%lu ",strlen(p),strlen(q));
intlen=strlen(q);
//确保p指向长度较长的串。确保len的值为较小的串的长度。
if(strlen(s1)<strlen(s2))
{
len=strlen(p);
q=s2;
p=s1;
}
intdifflen=strlen(p)-strlen(q);//两个子串长度的差值。
//printf("len=%ddifflen=%d ",len,difflen);
for(i=0;i<len;++i)
{
inta=p[i]+q[i]-96;
//printf("a=%d ",a);
if(a>=10)
{
k=a-10+48;
p[i+1]+=1;
}
else
{
k=a+48;
}
//printf("k=%c ",k);
p[i]=k;
printf("p[%d]=%c ",i,p[i]);
}
//解决较长串后一位如果被进位的情况。例如:1379+128(假设两个已逆序的串)或者15999+148
for(i=0;i<difflen;i++)
{
if(p[len+i]==58)
{
p[len+i]-=10;
if(i==difflen-1)
{//当i指向最后一个有效数字时,并且当前位是‘:’,则将其后一位赋为结束符
p[len+i+1]=49;//这种是赋值符号,是将'1'赋给p[i]。对比下面的运算符
p[len+difflen+1]=0;
}
else
{
p[len+i+1]+=1;//这种是运算符,是将p[i]的ASCII码加1.
}
printf("p[%d]=%c ",len+i,p[len+i]);
}
else
{
break;
}
}
printf("相加之后的串长度=%lu ",strlen(p));
puts(p);
returnp;
}

2. 用C语言写一段,可以计算任意两个输入数的和的程序

C语言任意两个数字的求和程序设计如下:

#include <stdlib.h>

intmain()

{

inta,b,sum;

printf("请输入两个整数:");

scanf("%d %d",&a,&b);

sum=a+b;

printf("这两个数的和是:%d ",sum);

printf("计算完成,谢谢使用!");

return0;

}


C语言指定两个数字的求和程序设计如下:

#include<stdio.h>

main()

{

inta,b,sum;

a=123;

b=789;

sum=a+b;

printf("sumis%d ",sum);

}

(2)数字相加可扩展性c语言扩展阅读:

完整的c程序的基本构成:

数据类型、常量与变量、数组、指针、字符串、文件输入/输出、运算、关键字、流程控制关键字、跳转结构、分支结构、语法结构、顺序结构、选择结构、循环结构。

c语言的运算符号:

比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。

运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。

3. 我想知道怎么用C语言解决输入一个数字求各位数字相加的和

楼主,不用循环似乎不行,要简单可以使用字符数组来接收输入的数字再求和。
void main()
{
char c[111];
int i=0;
int a=0;
scanf("%s",c);//输入一个数字,在111位之内,还想输入得更大,请把数组改大。

while(c[i]!='\0') //判断是否读到字符串的结尾。
{a=a+(c[i]-'0'); //c[i]指定的字符减去字符'0'就是相关的整型数字,比如
c[i]的字符为1,则'1'-'0'就得到整数1。然后求和。
i++;}
printf("%d",a);
system("pause");
}

4. 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);
}

5. C语言中 有没有一种运算可以将字节扩展,比如:abababab 扩展为aabbaabbaabbaabb

如果是显示的话, 很简单. printf("%8s", (char*)pstr); %s中加个数字就行了. 32位就%32s .
如果是真正扩展, 要这样. 8位char 16位short .
char a = 0xAA; //10101010;
short b= 0;
short b = a; //这样就扩展了.
如果是字符串.也是一样先清空.从尾部倒着填充. 比如把把一个字符串向左扩展32位.
#include "string.h"
#include "stdio.h"

void main()
{
char p1[33]={0} ;//设置结束
memset(p1, ' ', 32);// 填充空格
char *p2= "test33133311111111111111";//测试字符串

int i = 31;//循环填充.
int j = strlen(p2)-1;
for(; j>=0; i--,j--)
{
p1[i] = p2[j];
}

puts(p1);

}

6. c语言编写两个数字相加

scanf("%e,%e",&a,&b);//因为你的数据类型是double所以不能用%d(这个是整数的)
printf调用类似

7. 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);

}

(7)数字相加可扩展性c语言扩展阅读

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

1、strlen

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

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

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

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

2、strcpy

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

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

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

8. C语言 如何让两个数字相加

代码没错。
运行的时候,你首先要输入a和b的值,空格分隔,输入完回车后就会显示c的值了,就是a和b的和。

9. C语言中怎么实现两个超大整数的相加减乘除

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#define N 100

int main(int argc, char const *argv[])

{

char arr[N] = {};

gets(arr);

char brr[N] = {};

gets(brr);

int len1,len2,i = 0,j = 0;

len1 = strlen(arr);

len2 = strlen(brr);

int len = len1>len2?len1:len2;

/* c99之后数组初始化支持整型表达式,称为可变长数组,但按照c89的标准是不对的

int num1[len]; //将字符串转换成翻转的整型数组

int num2[len];

*/

int* num1 = (int*)malloc(len*sizeof(int));

int* num2 = (int*)malloc(len*sizeof(int));

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

{

num1[i] = i<len1 ? arr[len1-i-1]-'0':0;

}

for (j = 0; j < len; j++)

{

num2[j] = j<len2 ? brr[len2-j-1]-'0':0;

}

//int sum[len]; //定义和数组

int* sum = (int*)malloc(len*sizeof(int));

int flag=0; //设进位符

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

{

sum[len-1-i] = (num1[i]+num2[i]+flag)%10;

flag = (num1[i]+num2[i]+flag)/10;

}

if (flag == 1) printf("1"); //如果最高位有进位 则输出一个1

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

{

printf("%d",sum[i]);

}

printf(" ");

free(num1);

free(num2);

free(sum);

num1 = NULL;

num2 = NULL;

sum = NULL;

return 0;

}

(9)数字相加可扩展性c语言扩展阅读:

gets()函数用法

gets是从标准输入设备读字符串函数。

函数原型:char*gets(char*str);

功能为:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。

注意:不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。使用时需要包含stdio.h头文件

参数

str为字符串指针,用来存放读取到的数据。

返回值

读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。

10. C语言 多组数据 数字相加的问题

for(i=1;i<=T;i++,s=0)
这样就可以了,执行完一次把s赋值0,。