华为 题目大数据计算器

2.大数加减

问题描述:

在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。如下:

9876543210 + 1234567890 = ?

让字符串 num1="9876543210",字符串 num2="1234567890",结果保存在字符串 result = "11111111100"。

-9876543210 + (-1234567890) = ?

让字符串 num1="-9876543210",字符串 num2="-1234567890",结果保存在字符串 result = "-11111111100"。

要求编程实现上述高精度的十进制加法。

要求实现函数:

void add (const char *num1, const char *num2, char *result)

【输入】num1:字符串形式操作数1,如果操作数为负,则num1[0]为符号位‘-‘;num2:字符串形式操作数2,如果操作数为负,则num2[0]为符号位‘-‘

【输出】result:保存加法计算结果字符串,如果结果为负,则result[0]为符号位。

注:

I、 当输入为正数时,‘+‘不会出现在输入字符串中;当输入为负数时,‘-‘会出现在输入字符串中,且一定在输入字符串最左边位置;

II、输入字符串所有位均代表有效数字,即不存在由‘0‘开始的输入字符串,比如"0012", "-0012"不会出现;

III、要求输出字符串所有位均为有效数字,结果为正或0时‘+‘不出现在输出字符串,结果为负时输出字符串最左边位置为‘-‘。

示例

输入:num1 = "580"

num2 = "-50"

输出:result = "530"

输入:num1 = "580"

num2 = "-600"

输出:result = "-20"

#include <stdio.h>
#include <string.h>
//【输入】num1:字符串形式操作数1,如果操作数为负,则num1[0]为符号位‘-‘;num2:字符串形式操作数2,如果操作数为负,则num2[0]为符号位‘-‘ 【输出】result:保存加法计算结果字符串,如果结果为负,则result[0]为符号位。 

void change(char * str)
{
	int num =strlen(str);
	int i ;
	int tmp;
	for(i = 0;i <= (num/2 -1 ); i++)
	{
		tmp = str[i];
		str[i] = str[num - i -1];
		str[num -1 -i] = tmp;
	}
}
void jinwei(char *str)
{
	int num = strlen(str);
	if(str[num-1] !=‘-‘)
	{
		for(int i = 0;i<num;i++ )
		{
			if(str[i] >= 0x3a)
			{
				str[i+1]++;
				str[i]= str[i] - 10;
				if(i == num-1)
				{
					str[i+1] = ‘1‘;
				}
			}
		}
	}
	else
	{
		for(int i = 0;i<num-1;i++ )
		{
			if(str[i] >= 0x3a)
			{
				str[i+1]++;
				str[i]= str[i] - 10;
				if(i == num-2)
				{
					str[i+1] = ‘1‘;
					str[i+2] = ‘-‘;
				}
			}
		}
	}
}
void jinwei2(char *str)
{
	int num = strlen(str);
	for(int  i =0;i<num-1;i++)
	{
		if(str[i]<0x30)
		{
			str[i+1]--;
			str[i]=str[i]+10;
		}
	}
}
void add ( const char *num1,const char *num2, char *result)
{
	char num11[50] ="";
	char num22[50] ="";
	strcpy(num11,num1);
	strcpy(num22,num2);
	change(num11);
	change(num22);
	int i1 = strlen(num11);
	int i2 = strlen(num22);
	int imin ;
	int  i;
	int flag;
	int t;
	if(num1[0] !=‘-‘ && num2[0] !=‘-‘)
	{
		i1 >= i2 ? (imin = i2 ) : (imin = i1);//得到加数字中字符串较小的
		i1 >= i2 ? (flag = 2) : (flag = 1);  //标志位 哪一个是较小的字符串
		for(i=0;i<imin;i++)
		{
			result[i] = num11[i] + num22[i] - 0x30;
		}
		if(flag == 2)
			for(;i<i1;i++)
				result[i] = num11[i];
		else if(flag == 1)
			for(;i<i2;i++)
				result[i] = num22[i];
	}
	if(num1[0] ==‘-‘ && num2[0] ==‘-‘)
	{
		i1 >= i2 ? (imin = i2 ) : (imin = i1);//得到加数字中字符串较小的
		i1 >= i2 ? (flag = 2) : (flag = 1);  //标志位 哪一个是较小的字符串
		for(i=0;i<imin-1;i++)
		{
			result[i] = num11[i] + num22[i] - 0x30;
		}
		if(flag == 2)
			for(;i<i1;i++)
				result[i] = num11[i];
		else if(flag == 1)
			for(;i<i2;i++)
				result[i] = num22[i];
	}
	if(num1[0] !=‘-‘ && num2[0] ==‘-‘)
	{
		change(num11);
		change(num22);
		flag = strcmp(num11,(num22+1));
		if(flag > 0)//正数大于负数
		{
			change(num11);
			change(num22);
			for(i =0;i< i1;i++)
			{
				if(i<i2-1)
					result[i] = num11[i] - num22[i] + ‘0‘;
				else
					result[i] = num11[i];
			}
		}
		if(flag < 0)//正数小于负数
		{
			change(num11);
			change(num22);
			for(i = 0;i<i2;i++)
			{
				if(i<i1)
					result[i] = num22[i] - num11[i] + ‘0‘;
				else
					result[i] = num22[i] ;
			}

		}
		if(flag == 0)
			result[0] = ‘0‘;
	}
	if(num1[0] ==‘-‘ && num2[0] !=‘-‘)
	{
		change(num11);
		change(num22);
		flag = strcmp((num11+1),num22);
		if(flag > 0)//正数xiao于负数
		{
			change(num11);
			change(num22);
			for(i = 0;i<i1;i++)
			{
				if(i<i2)
					result[i] = num11[i] - num22[i] + ‘0‘;
				else
					result[i] = num11[i];
			}
		}
		if(flag < 0)//正数da于负数
		{
			change(num11);
			change(num22);
			for(i =0;i< i2;i++)
			{
				if(i<i1-1)
					result[i] = num22[i] - num11[i] + ‘0‘;
				else
					result[i] = num22[i]  ;
			}
		}
		if(flag == 0)
			result[0] = ‘0‘;
	}
}
void qianyi(char *str)
{
	int i =0;
	for(i = 1;i<strlen(str);i++)
	{
		str[i-1] = str[i];
	}

}
void xianshi(char *str)
{
	int  i;
	if(str[0] == ‘-‘)
		for(i = 1;i<strlen(str);)
		{
			if(str[i] == ‘0‘)
			{
				qianyi((str+i));
				str[strlen(str)-1] = ‘\0‘;
			}

			else
				break ;
		}
	else
		for(i = 0;i<strlen(str);i++)
		{
			if(str[i] == ‘0‘)
				qianyi((str+i));
			else
				break ;
		}

}
int main()
{
	char  a1[] = "580";

	char a2[] = "-600";
	char a3[50] = "";
	//char a3[] ;
 	add(a1,a2,a3);
 	//change(a1);
 	if(a1[0]!=a2[0])
 		jinwei2(a3);
	else
		jinwei(a3);
 	change(a3);
 	xianshi(a3);
	printf("%s",a3);
}

  

时间: 2024-08-28 01:50:14

华为 题目大数据计算器的相关文章

试水“大数据” 招商银行突围互联网金融

在华为等企业的努力下,大数据已转化为传统商业银行触手可及的技术.通过两年的摸索,招商银行切身体会到了大数据为金融服务.金融创新所带来的惊人改变,并率先踏出了基于大数据分析的互联网金融服务的关键一步.在探索大数据奥秘的过程中,传统商业银行正逐步走出互联网金融“弱势群体”的阴影,重回强者之位. 理财产品推介短信量和过去相比下降82%,反倒实现了95%的客户命中率;过去仅能在线查询1年的历史明细,现在可以查询到5年以上;信用卡征信可以从15天缩短到10分钟以内,小微贷获客预测转化率比传统方式提升40倍

FusionInsight,一个融合的大数据平台

随着物联网技术和应用的普及,以运营商.互联网以及实体经济行业为代表的企业产生了越来越多的数据,大数据的发展越来越蓬勃. 从2007年开始,大数据应用成为很多企业的需求,2012年兴起并产生了大数据平台,使用者主要是程序员:2013年到2017年间,数据逐渐增多,大数据平台变成了融合大数据平台,使用者从程序员变成数据管理员和数据分析师:从2018年开始,大数据进入企业数据智能新阶段,普通的工程师也能轻松应用. 当数据越来越多,需求也越来越高,环境越来越复杂,分析处理的方式也多种多样,这对平台有了更

华为内部关于大数据的一篇好文

科技的进步在很多的时候总会超出我们的想象,如果未来我们一个人拥有的电脑设备超过现在全球现在计算能力的总和,一个人产生的数据量超过现在全球数据 量的总和,甚至你的宠物小狗产生的信息量都超过现在全球数据量的总和,世界会发生什么呢?阅读本文,大数据(Big Data)会告诉你一个充满奇幻色彩的世界. 一.详解时髦词汇:大数据 似乎一夜之间,大数据(Big Data)变成一个IT行业中最时髦的词汇. 首先,大数据不是什么完完全全的新生事物,Google的搜索服务就是一个典型的大数据运用,根据客户的需求,

华为内部狂转好文:有关大数据,看这一篇就够了

一.详解时髦词汇:大数据 似乎一夜之间,大数据(Big Data)变成一个IT行业中最时髦的词汇. 首先,大数据不是什么完完全全的新生事物,Google的搜索服务就是一个典型的大数据运用,根据客户的需求,Google实时从全球海量的数字资产 (或数字垃圾)中快速找出最可能的答案,呈现给你,就是一个最典型的大数据服务.只不过过去这样规模的数据量处理和有商业价值的应用太少,在IT行业没有 形成成型的概念.现在随着全球数字化.网络宽带化.互联网应用于各行各业,累积的数据量越来越大,越来越多企业.行业和

华为企业云重磅亮相 “大数据产业周”,推进京津冀大数据产业发展

2015年12月7-13日, 中国(廊坊) 大数据产业周(以下简称大数据产业周)在河北省廊坊市项目中心正式启幕,本次大数据产业周活动是继党的十八届五中全会提出实施“国家大数据战略” 与8 月31 日国务院印发<促进大数据发展行动纲要>后, 国内首次举办的以大数据为主题的产业周活动,共吸引百余家知名厂商参展,近1000位大数据领域专业观众参加.华为企业云在大数据产业周亮相,展示了一系列面向政府.智能制造.金融.交通.医疗.能源等领域的大数据和云计算服务. 河北省政府党组成员吴显国.廊坊市市委书记

大数据是什么?华为云学院带你探索大数据之旅

大数据是什么?华为云学院带你探索大数据之旅我们首先从大数据是什么开始讲起,!下面由我来带领大家!展开我们本次的大数据学习之旅!大数据是什么,内容将包括大数据的产生,发展大数据的基本概念.首先我们来追溯一下大数据的产生与发展,大数据的产生和发展主要经历了三个阶段. 第一个阶段,我们称为是萌芽期!自上世纪九十年代至本世纪初,随着数据挖掘理论和数据库技术的逐步成熟,一批商业智能工具和知识的管理技术也开始得到应用,比如数据仓库,专家系统知识管理系统等等.第二阶段我们称为是成熟期.本世纪的前十年Web2.

华为领跑中国政务大数据市场

华为领跑中国政务大数据市场在全球权威的咨询与服务机构IDC最新发布的<IDC MarketScape:中国政务大数据管理平台2018 厂商评估>报告中,华为位居领导者象限领先位置.华为云政务大数据解决方案凭借过硬的综合实力和技术创新,在市场表现与现有能力两大维度均排名第一.华为领跑中国政务大数据市场为了推进"互联网+政务服务"的落地,全国各地都在加快政务大数据的建设,打通流程.部门.地域的壁垒,实现数据的高效自由的流动和共享.华为携手合作伙伴为客户提供从IT基础设施到应用的

【华为云技术分享】大数据容器化,头部玩家尝到了甜头

[摘要] 大数据容器化,大势所趋.头部玩家在进行大数据容器化后,尝到了甜头? 大数据的需求热度,从来都是这个时代的浪尖.然而由于大数据系统的复杂性,一度导致业界大数据已死的各种声音不断.尤其是当MapR被HPE收购,Cloudera公司股票持续跌成狗,使得这种声音进一步放大.其实,大数据的需求一直在,只是传统的大数据实现系统需要考虑重新构建.而容器依靠其自身的标准化,一次构建,随处运行的能力,使得非常适合大数据系统的构建和管理.容器技术当前正是那只火遍全球的当红辣子鸡. 1 华为云BigData

【云杂谈】之四《大数据浪潮中,IT巨头和互联网新贵谁在裸泳?》

[云杂谈]之四<大数据浪潮中,IT巨头和互联网新贵谁在裸泳?> 摘要:在大数据浪潮中,许多公司都耐不住寂寞跳进海中冲浪.本文主要介绍不同类型的公司对大数据的理念和做法有哪些不同.IBM.Oracle等大IT巨头以及Google.Baidu等互联网新贵们对大数据商业策略上是有所不同的,以及他们选择这样策略的原因.然后,最终谁可能是在裸泳? 大数据的背景 关于大数据的说法很多,谈论最多的就是大数据的几个V.各大厂商对大数据的概念的阐述中,不管是4V(Volume.Velocity.Variety.