`
jackchen0227
  • 浏览: 143416 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

joj 2749 大数比较大小与减法

    博客分类:
  • ACM
阅读更多


/*
	题目不难,一个大数减法,一个大数的比较,关键是边界条件的检查
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int code[10] = {0,1,2,-1,-1,5,9,-1,8,6}; //这个是0-9旋转之后的数字,-1表示旋转之后出错
/*
	大数的减法
*/
void  minus(char s[1000],char s1[1000])
{
	int k = 0;
	for(int i=strlen(s) - 1;i> -1;i--) //注意此时倒着计算,是从 strlen(s) - 1开始,不是从 strlen(s)
	{
		if(s[i] < (s1[i] + k))
		{
			//s[i] = 10 + s[i] - s1[i] - k; //做减法后还要转换成字符,也就是加上 '0'
			s[i] = 10 + s[i] - s1[i] - k + '0';
			k = 1;
		}
		else 
		{
			s[i] = s[i] - s1[i] - k + '0';
			k = 0;
		}
	}
	bool flag = false; //由于结果的高位也就是数组的前面可能出现 0,而这些 0 是没有必要输出的。
	for(int j=0; j<strlen(s);j++)
	{		
		if(flag)
		{
			printf("%c",s[j]);
			continue;
		}		
		if(s[j] == '0') 
			continue;
		//	s[j] = '\0';
		else
		{
			printf("%c",s[j]);//别忘了这个,这个边界要注意
			flag = true;
		}		
	}
	printf("\n");
}


int cmp(char s[1000],char s1[1000])
{
	if(s[0] > s1[0]) //如果最高位不同
	{
		return 1;
	}
	else if((s[0] < s1[0]))
	{
		return -1;
	}
	else if(s[0] == s1[0]) //最高位相同
	{
		int k = 0;
		while(s[k] == s1[k] && k < strlen(s)) //这个地方表示相同则一直向后走,
			k++;
		/*
			这被注释掉两个语句出现的原因是刚开始考虑的是此时的s[k] != s1[k],所以要回退一下,
			因此如果两个数字完全相同的话,k 会退后就是 strlen(s) - 1,不是strlen(s)
			
			但是下面的操作直接是从不相等的部分开始的,所以没有必要回退
		*/
		//k --; 
		//if(k == strlen(s1) - 1) 
		if(k == strlen(s)) //可能有两个数字相等的情况。
			return 0;
		else if(s[k] > s1[k])
			return 1;
		else
			return -1;
	}	
}
int main()
{
	char str[1000];
	char str1[1000];
	int time = 0;
	freopen("in.txt","r",stdin);
	scanf("%d",&time);
	for(int i=0;i<time;i++)
	{
		memset(str,'\0',sizeof(str));
		memset(str1,'\0',sizeof(str1));
		scanf("%s",str);
		int j = 0;
		int len = strlen(str);
		while(j< len)
		{
			if(code[str[j] - '0'] == -1)
				break;
			str1[len - j - 1] = code[str[j] - '0'] + '0';
			j ++;
		}
		if(j < len)
		{
			printf("ERROR\n");
			continue;
		}
		switch(cmp(str,str1))
		{
		case 0:
			printf("0\n");
			break;
		case -1:
			{
				minus(str1,str);
				break;
			}
		case 1:
			minus(str,str1);		
			break;
		}
	}
	return 0;
}


/*
int main() //这个方案是错误的是因为没有考虑大数的问题
{
int time;
int num;
freopen("in.txt","r",stdin);
scanf("%d",&time);
for(int i=0;i<time;i++)
{
scanf("%d",&num);
int tmpNum = num,newNum =0,tmp;
int j = 0;

		while(tmpNum != 0)
		{
		if( code[tmpNum % 10]  == -1)
		break;
		newNum = code[tmpNum % 10] + newNum * 10;
		j++;
		tmpNum = tmpNum /10;
		}
		if(tmpNum != 0)
		printf("ERROR\n");
		else if(num > newNum)
		printf("%d\n",num - newNum);
		else
		printf("%d\n",newNum - num);
		}
		fclose(stdin);
		return 0;
		}
*/

 水题一个,对我来说关键的是 边界条件的检查

  • 大小: 203.4 KB
分享到:
评论

相关推荐

    joj 部分题目答案 自己做的 仅供参考

    joj 部分题目答案 自己做的 仅供参考 joj 部分题目答案 自己做的 仅供参考 joj 部分题目答案 自己做的 仅供参考 joj 部分题目答案 自己做的 仅供参考 joj 部分题目答案 自己做的 仅供参考

    joj上做的一些ACM试题

    在JOJ上做的一些ACM试题,都通过在线测试。

    joj.rar_joj

    本程序能实现操作系统中的先进先出页面置换算法

    joj acm 部分习题解答

    一些题目解答 1001-1012 自己做的,希望能帮助到一些朋友

    JOJ-jilin-university--acm.rar_joj

    可以为在JOJ上练习的同学做入门使用,这些代码全部通过。

    acm.rar_acm jlu 10_acm jlu 1029_joj 1237_joj10

    joj acm 源代码,即一些题得答案,方便大家联系参考。加油吧。

    JoJ-crx插件

    Etre au courant quand JoJ est en live,策划人semaine et liens vers lesréséauxauxsocioaux Soyez au courant纠结JoJ开始à流光! 现场直播将继续进行。 约翰·奎因·伊斯特·布鲁和克林·德集团的非官方网站 D...

    吉林大学 joj 1000-2645题代码

    吉林大学 joj 1000-2645题代码,嘿嘿,大家就不用在花JPOINT买代码了,祝ACMer实现自己的心愿

    Joj - Java Version of Java-开源

    Joj 以与 JDOM 提供 XML 的 Java 表示类似的方式提供 Java 源代码的 Java 对象表示。

    acm joj 1600

    关于大数取模的运算,比如说:a^b%m。下面提供2种解法。

    joj 1424 硬币兑换问题

    硬币转化问题。用动态规划解决,不是很难。

    一个有关调度的问题joj1015

    这个题其实现在想起来也不知道是怎么就给ac的。

    吉林大学ACM题集.pdf-JOJ

    整理的ACM题集,吉林大学的,pdf格式,jilin univercity online judge system

    jovo-plugins:J Jovo框架插件

    插件清单要将您的插件添加到下表中,请分叉存储库,然后以与其他插件相同的格式将您的插件添加到plugins.json文件中。 之后,运行npm run docs脚本以及提交并推送您的更改。 最后,打开包含更改的请求请求,其余的...

    JoJo-s-Bizarre-Survival:一个模组,将JoJo的奇异冒险中的看台添加到Minecraft

    该mod基于荒木飞吕彦的JoJo的奇妙冒险漫画和动漫系列。 这个mod也受到KnightDemon的1.12 mod 极大启发。 这个mod的目的是要从专营权中尽可能多地增加Minecraft,该mod目前仅包含Stand能力,其他能力(Hamon,...

    furystudios

    furystudios 普尔维·扎达塔克(Prvi zadatak) ...DroppingOff - radnikhodajućidolazi做pripadajuće科萨雷(izvedeno kroz provjeru tagova kutije)我卡达joj JE dovoljno blizu,fizičkiJE lan

    ControlEstoque_GH:..

    Este Projeto签证是由estoque进行的,它是由mer mercadorias uma determinada empresa sejam averiguadas和atualizadas ... 2021年1月20日,由JoséCláudiodeAraújoJúnior和Annielly Ferreira de Sousa所设计。

    大智慧最新安装

    大智慧最新安装包,老的已经过期不能查询个人自选股,所以推荐最新的大智慧给大家安装

Global site tag (gtag.js) - Google Analytics