华为机试—大数相减

题目:大数相减

输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。

备注:1、两个整数都是正整数,被减数大于减数 示例:

输入:1000000000000001       1

输出:1000000000000000

#include <stdio.h>
#include <string.h>    

#define MAX 100
//100位大数相减   

int bigNumSub(char a[],char b[],char sub[])
{
    int i=0;
    int c=0;//判断是否够减,0够减,1不够减 

    //清0
    char m[MAX]={0};  //被减数大于减数
    char n[MAX]={0};  //减数
    memset(sub,0,100);    

    //字符串反转且字符串变数字
    int lenA=strlen(a);
    int lenB=strlen(b);  

    for (i=0;i<lenA;i++)
    {
       m[i]=a[lenA-i-1]-'0';
	   //printf("%d",m[i]);
    }
    for (i=0;i<lenB;i++)
    {
       n[i]=b[lenB-i-1]-'0';
	   //printf("%d",n[i]);
    }    

    //位运算:够减不借位,不够减借位,并且后一位减一
    for (i=0;i<lenA;i++)
    {
		c=(m[i]-n[i])<0?1:0;
		sub[i]=m[i]+10*c-n[i]+'0';//加'0'转换
		if(i+1==lenA)
			break;
		m[i+1]-=c;
    } 

    return lenA;
}     

void print(char sub[],int lenA)
{
    int i;
	int k;//第一个不为0的数字

    for(i=lenA-1; i>=0; i--)
    {
		if(sub[i]!='0'){
			k=i;
			break;
		}
	}
	for(i=k;i>=0;i--){
        printf("%c",sub[i]);
    }
}   

int main()
{
    char a[MAX];
    char b[MAX];
    char sub[MAX];
    puts("input a:");
    gets(a);
    puts("input b:");
    gets(b);
    print(sub,bigNumSub(a,b,sub));
	printf("\n");
    return 0;
}    

测试结果,可能不周全,欢迎查漏补缺:

时间: 2024-08-03 05:05:03

华为机试—大数相减的相关文章

华为机试—整数相除

两个整数相除,将结果用字符串返回.如果是循环小数,将循环的位用括号括起来. 函数原型为 void div(const int a,const int b,char *str) 输入:1 3 输出:0.(3) #include<iostream> #include<string> using namespace std; int maxn = 100; //设置字符串的最大位数 int reminder_exist[10000]; int reminder_pos[10000]; v

华为机试—正整数加减运算式

题目:正整数加减运算式 通过键盘输入100以内正整数的加.减运算式,请编写一个程序输出运算结果字符串. 输入字符串的格式为:"操作数1 运算符 操作数2","操作数"与"运算符"之间以一个空格隔开. 补充说明: 1. 操作数为正整数,不需要考虑计算结果溢出的情况. 2. 若输入算式格式错误,输出结果为"0". 要求实现函数: void arithmetic(const char *pInputStr, long lInputL

[华为机试真题]69.姓名的夫妻相

题目 在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是"夫妻相".所谓"夫妻相",就是两个人看上去比较般配,长相.身材等某些方面有一定的相似度. 本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具"夫妻相"的人. 题目中预先给定一组女士的姓名拼音.输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名. 规则1:如果字母重复数最多的女士有多位相同,则以最先匹配的女士做为最

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

华为机试—介绍、剖析、建议

一.华为机试介绍 1.大致介绍 时间:120分钟 环境:Visual Studio(去年是vs2005).Visual C++.VC 6.0.Eclipse(Java) 题量:共3题 初级题--60分--3组测试数据 中级题--100分--5组测试数据 高级题--160分--8组测试数据 注:初级题和中级题为必答题,高级题为附加题. 提交次数:每题最多5次 评判方式:按通过测试数据组数给分,每通过一组得20分 2.考试说明 这里有一个老版的机试考试说明,供大家参考: C/C++,JAVA机试流程

华为机试集锦(Java)

题目链接http://blog.csdn.net/hackbuteer1/article/details/11132567 1.字符串过滤 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉. 比如字符串“abacacde”过滤结果为“abcde”. 解决:hashset可以解决 2.字符串压缩 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后

[算法]大数相减

今天在小米OJ上看到一道题(https://code.mi.com/problem/list/view?id=3), 很有意思, 试着做了一下 描述: 两个长度超出常规整形变量上限的大数相减,请避免使用各语言内置大数处理库,如 Java.math.BigInteger 等. 输入: 有 N 行测试数据,每一行有两个代表整数的字符串 a 和 b,长度超过百位.规定 a>=b,a, b > 0. 测试结果可以用 linux 小工具 bc进行测试是否正确. 输出: 返回表示结果整数的字符串. 输入样

[华为机试真题]66.单词搜索

题目 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 * 题目:WordSearch * 来源:华为机试真题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector> #include <stack> #include

华为机试正式版(西安c/c++/java),今天下午去机试的题目,新鲜出炉了!

以下题目都是回忆的,题目都很简单, 大家有些基础就可以参加!(语言可以是c/c++,也可以是java的) 题目一(60分): 字符串操作, 将小写转换成大写, 将大写转化为小写, 数字的不做转换 例如, 输入:aBcD12 输出:AbCd12 题目二(100分): 将输入的字符串按照规定重新排序,如果字符串长度为奇数, 则中间的字符保持不变, 中间字符左侧降序排列, 右侧字符按照升序排列, 如果字符串长度为偶数,则左半侧字符降序排列,右半侧字符则按照升序排列 例如, 输入:ab5de 输出:ba