末位零问题(换种思路,问题能被无限倍的简化,这就是算法的魅力!)
来源:互联网 发布:软件自学网创办人 编辑:程序博客网 时间:2024/05/21 11:00
问题:
函数 f(x)
现在已知 n ,k。n<2^31 k<9
求 min(z) f(z)=k 且z%n=0。
输入:
多组输入,每组两个整数
输出:
每组输出一个答案占一行。
刚开始是这样想的
#include <stdio.h>int pow1(int a,int b) //定义快速幂函数{ int t=1,m=a; while(b!=0) { if(b&1==1) t*=m; m*=m; b>>=1; } return t;}int main(){ int n,k,a,b; int i; while(scanf("%d %d",&n,&k)!=EOF) // k表示一个数末尾 0 的个数, n是这个数的约数 // 求出这个数的最小值。。 { i= 2; a=pow1(10,k); // 首先满足末尾有k个0 的最小值 肯定是10的k次方 b=a; while(i != 0) { if(b%n == 0) //判断这个数是不是n的倍数 { printf("%d\n",b); //如果是 就输出这个数 break; } else // 如果不是 { b=a*i; // 就依次把这个数乘2、3、4、5……一直到是n的倍数为止 i++; } } } return 0;}这样写答案一定是对的,但是如果k=0,n=2^30 就要循环2^30次方次!!!显然要超时!!!的!!!
下是一种很巧妙的方法!
灵活的运用打表,gcd,!
仔细想下题的意思,要求的z就是 n 和 10^k的最小公倍数吧!!!
能想到这里就简单了!!!
typedef long long LL; LL gcd(LL a, LL b) //定义gcd函数{ return b!=0 ? gcd(b, a % b) : a;}int main(){ int i; LL n, k, res[10]; res[0] = 1; for(i = 1; i < 10; ++i) { res[i] = res[i - 1] * 10; //数组赋值 10^0--10^9,因为k最大是9哈! } while(scanf("%lld %lld", &n, &k) != EOF) { printf("%lld\n", n * res[k] / gcd(n, res[k]));// 求最小公倍数 ,也就是z } return 0; // 不论k的值是多少,直接出答案!!}
换种思路,问题能被无限倍的简化,这就是算法的魅力!
阅读全文
0 0
- 末位零问题(换种思路,问题能被无限倍的简化,这就是算法的魅力!)
- 一笔鲜花的费用能演变成巨额资金,这就是时间成本的魅力所在(转)
- 换个角度想问题,也许成功就是你的
- 一道简单的算法问题--数学的魅力
- dsk6711线性汇编奇怪的问题(去掉一条存储指令能快10倍)
- 从一个简单查找问题看算法的魅力
- 问题简化的策略
- 解决算法问题的思路总结
- 换个思路想问题
- 《程序员》 -- 计算几何的魅力:美术馆问题
- 李开复: 算法的魅力
- 最简化约瑟夫环问题的递归算法详细解析
- 满足就是不可抗拒的魅力
- 物品无限的背包问题(贪心算法) By ACReaper
- 繁体字简化出来的问题
- SQL语言的魅力 36秒求解八皇后问题(92种结果)
- 换一种思路:解决Ajax程序与IE7不兼容的问题
- 换一种思路:解决Ajax程序与IE7不兼容的问题
- 创建或打开c++浏览数据库文件时发生错误,IntelliSense和浏览信息将不能用于C++项目。
- 老铁,邀请你来免费学习人工智能!!!
- 说说那些死于决斗的大牛
- RTCMultiConnection基于WebRTC进行实时连接的媒体服务器
- NTP搭建
- 末位零问题(换种思路,问题能被无限倍的简化,这就是算法的魅力!)
- markdown2安装方案
- HTML&CSS实验(5)
- iOS APP调取短信 发送消息给其他人
- 为sys/cat文件生成测试签名
- servlet/filter/listener/interceptor区别与联系
- 7-18 寻找大富翁(25 分) (堆排序)
- qt pro文件和pri文件的区别
- 【第六届蓝桥杯】串逐位和