UVa 10494 如果我们再回童年
来源:互联网 发布:马云的淘宝店 编辑:程序博客网 时间:2024/05/22 19:18
思路:借助long long类型暂存一部分的被除数,即可模拟除法。(这里是从第一位开始除除数,实现起来方便些,可以前九位初始化的)
注意:还是题目没看太好就开始做了吧,首先第二个整数是int型就可以了,结果我一开始做的是两个bign类型相除,所以一直把自己引在bign的这条路上。无奈bign我用减法代替除法都是超时,如果用这里的这个方法做,肯定也可以,但感觉没必要再bign了~所以直接用C语言字符数组写的。。参考了别人的代码,结果跟别人的差不多了%>_<%(开始自己已经有思路了,就是拿高九位初始化,然后余数左移一位再加被除数的下一位,循环除除数。发现高九位表示起来好麻烦,就看了下别人的。)这里我开始没想到这样除的原因,应该是,一我以为是两个大整数,二long和int一样范围,我没想到long long (之前用的不多~)。需要注意前导0。(我试了下,只要在输出时注意前导0就行了,把del_qzero(a,strlen(a));注释掉,也可以过~)
自己提交遇到的问题:RE,我开始while里写的是scanf(...)!=EOF;我实在找不到RE的原因,模0除0基本不可能啊,除数是固定的,除非除数一开始就是0;把循环里的改为!=3时,就提示WA。说明第三个整数读取失败,为0。看了下题目说明,果不其然,是一个或多个空格,我开始用的%c存第二个参数,虽然前面有%*c过滤一个空白符。。。这样的RE还挺难找的~这说明,还是要看清题目,看好数据描述!!!
另外,哪个大神用bign过了,跟我说下哈,其实也不是bign,就是减法代替除法的方法过了的法,求告知~ UVa 的 big number 终于做完了,向下一节出发!加油,提高效率!
Code:
#include<stdio.h>#include<string.h>#define MAXN 1000void del_qzero(char *a,int len);void divide();void mod();char a[MAXN];char c[10];int cs; int main(){ //char c='\0';int a=c-'0';printf("%d",a); 空字符减去'0'是-48,其实应该想通的~ while(scanf("%s%s%d",a,c,&cs)==3)//第二个参数用char不行,因为题目里说可能有多个空白符 { //printf("%s\n%c\n%d\n",a,c,cs); //去除前导0 del_qzero(a,strlen(a)); //printf("%s\n",a); if(c[0]=='/') divide(); else mod(); } }void del_qzero(char *a,int len){ int countl=0; for(int i=0;i<len;++i) if(a[i]=='0') countl++; else break; for(int i=0;i<len-countl;++i) a[i]=a[i+countl]; a[len-countl]='\0'; //printf("%d\n",strlen(a));}void divide(){ int sum[MAXN]; //printf("hehe\n"); int len=strlen(a); for(int i=0;i<len;++i)//这里是len,所以没访问到空字符~ sum[i]=a[i]-'0';//字符型转换成整型 long long bcs=0,ys=0;//被除数、余数 for(int i=0;i<len;++i) { bcs=ys*10+sum[i];//余数左移一位再加上当前位 sum[i]=bcs/cs;//sum直接保存相应为的商 ys=bcs%cs; } //printf("%lld\n%lld\n",bcs,ys); //处理前导0 int countl=0; for(int i=0;i<len;++i) if(sum[i]==0) countl++; else break; for(int i=0;i<len-countl;++i) a[i]=(char)(sum[i+countl]+'0'); a[len-countl]='\0'; if(len-countl==0)//长度为0时,空字符输出为空,应输出0 printf("0\n"); else printf("%s\n",a);} void mod(){ int sum[MAXN]; int len=strlen(a); for(int i=0;i<len;++i)//这里是len,所以没访问到空字符~ sum[i]=a[i]-'0';//字符型转换成整型 long long bcs=0,ys=0;//被除数、余数 for(int i=0;i<len;++i) { bcs=ys*10+sum[i];//余数左移一位再加上当前位 sum[i]=bcs/cs;//sum直接保存相应为的商 ys=bcs%cs; } printf("%lld\n",ys);//long long型 }
- UVa 10494 如果我们再回童年
- UVa 10494 如果我们重返童年
- UVA10494-如果我们返回童年
- 我们的童年,永远停滞的童年!
- 童年
- 童年
- 童年
- 童年
- 童年
- 童年
- 如果我们还有将来
- 如果,我们变成回忆
- 如果,我们变成回忆。
- 如果,我们变成回忆
- 如果你累了!我们可不可以一起回阜阳!
- 生于七八十年代,我们的童年是这样的
- 还记得我们童年的那些成语故事么?
- 怀念童年的萤火虫,我们的萤火虫去哪了?
- CSS border三角、圆角图形生成技术简介
- how to interrupt kgdb after press continue
- php中逻辑运算的短路算法
- Shell 脚本小试牛刀(0) -- 开篇
- 金山快盘ubuntu shell客户端
- UVa 10494 如果我们再回童年
- 基于SSH协议的网络攻击防御分析与研究
- Hadoop1.0的安装总结
- iptables网关(linuxBox)和squid(squidBox)不在同一台机器的时候,如何作透明代理?
- CSS reset的重新审视 – 避免样式重置
- c 语言接口设计与实现读书笔记与习题 解答 (一)
- 001_011 Python 检查一个字符串是文本还是二进制
- 我是如何对网站CSS进行架构的
- 玩转php数组(一)