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,。