编写一个函数,要求输入任意两个无符号32位整形数,在控制台打印两个数相加的结果,要求禁止使用64位变量

两个无符号32位整形数相加

思路解析

想法介绍

由于32位数据相加可能产生33位数据,但是32位数据变量无法存储
所以需要一个存储33位数据的空间,或者将第33位数据存储于另一个32位的变量
本代码采用的是足够长度的字符串存储相应的数据

实现过程

1、将无符号整形数据以%u的形式存储于两个字符串数组中,补足其数据首位不足33位的数据位
2、一个基于数据长度的循环从数据低位开始进行加法运算,ASCII码运算,字符数据与实际整形差 值为48,位运算产生进位时将字符值-10归位,并置位进位信号,然后在高一位的数据处理中进行进位操作
3、由于在进位计算过程中,32位数据最大值进位时会回归0,由此会少一,需要在代码中手动增加

代码实现

#include<stdio.h>
#include<string.h>
void sum(char*arr,char*brr)
{
	int i=0,j=0,flag=0;
	char temp;
	for(i=0;arr[i]!='\0';i++)
	{}
	arr[i-1]+=1;
	for(j=0;brr[j]!='\0';j++)
	{}
	j--;
	i--;
	for(j;j>=0;j--)
	{
		if(i>=0)
		{
			temp=arr[i]+brr[j]-48;
			i--;
		}
		else
		{a
			temp=brr[j];
		}
		if(flag==1)
		{
			temp++;
			flag=0;
		}
		if(temp>'9')
		{
			temp=temp-10;
			flag=1;
		}
		arr[j]=temp;

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

	unsigned char arr[33]={0};
	bzero(arr,sizeof(arr));
	unsigned char brr[32]={0};
	bzero(brr,sizeof(brr));
	unsigned int a=0xffffffff,b=0x00000002;
	unsigned int c=a+b,d=0;
	if(c<a||c<b)
	{
		
		sprintf(arr,"%d%u%c",0,c,'\0');
		sprintf(brr,"%d%u%c",0,a,'\0');
		sum(arr,brr);
		//sum(arr,brr);
		
	}
	

//	else
	
		
	printf("%s\n",arr);
    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值