UvaOJ 550 - Multiplying by Rotation
来源:互联网 发布:dnf n卡独显优化设置 编辑:程序博客网 时间:2024/04/26 14:40
题目
题意略。
分析:这题我把式子各种展开,然后推了一个东西出来,枚举位数,然后求得一个x,若x能表示为当前总位数减一的base下的数,则当前位数为最小。这样写了后TLE了,判断那里可能耗时了。
看了别人的题解后,发现我考虑复杂了。其实这就是一个base位进制下的多位数乘以一位数的乘法运算。写成竖式如下,
a0a1a2...an-1c
× f
----------------------
ca0a1a2...an-1
(a0a1a2...an-1c 表示 factor1,f表示factor2,c为需要移动的数字)。
运算过程如,c*f 为最低位运算后的结果 c*f 在base下表示为 c*f/base、(c*f)%base 两位数,其中c*f/base为进位,c*f%base为结果的当前位,由题目条件知,an-1 = c*f%base.
所以我们继续进行an-1*f,直到结果的当前位等于c,且进位为0。可见这就是小学时给的那种竖式留几个空叫你填空的那种题目,只不过由十进制改成了base进制。
代码:
#include <iostream>#include <cmath>#include <string>using namespace std;int main() {int base, n, m;while(cin >> base >> n >> m) {if(m == 1) {cout << 1 << endl;continue;}int carry = 0, cur = n, i = 1;for(; ; i++) {int tmp = cur * m + carry;carry = tmp / base; //满base进一cur = tmp % base; //当前位if(carry == 0 && cur == n) {cout << i << endl;break;}}}return 0;}
TLE的代码:
#include<iostream>using namespace std;int b, c, f;int is(int x, int n) //x能否表示成b下的n位数{ int cnt=0; for(; x; x/=b, cnt++); if(cnt == n) return 1; else return 0;}int main(){ while(cin>>b>>c>>f) { int i; //first factor的位数 n int b_pow = 1; //b的n-1次 for(i=1; b_pow<=f; i++) b_pow*=b; //①n能不能为1?②<=,x不能为0? for(; ; i++, b_pow*=b) { int t1 = c*(b_pow-f); int t2 = (f*b-1); if(t1%t2 != 0) continue; //x为整数 int x = t1/t2; if(is(x, i-1)) { cout<<i<<endl; break; } } }}
- UvaOJ 550 - Multiplying by Rotation
- 550 - Multiplying by Rotation
- 550 - Multiplying by Rotation
- 550 - Multiplying by Rotation
- 550 - Multiplying by Rotation
- uva 550 - Multiplying by Rotation
- Uva 550 - Multiplying by Rotation
- uva 550 - Multiplying by Rotation
- UVa 550 Multiplying by Rotation
- UVa 550 - Multiplying by Rotation
- UVA 550 - Multiplying by Rotation
- UVa 550 - Multiplying by Rotation
- UVa 550: Multiplying by Rotation
- UVA 550 - Multiplying by Rotation
- Uva 550 - Multiplying by Rotation
- uva 550 - Multiplying by Rotation
- uva 550 Multiplying by Rotation
- uva 550 - Multiplying by Rotation
- [Java] 数组排序和字符串排序
- Ztree-CheckBox
- cxf+spring+hibernate+struts
- linux虚拟机开机自动启动网卡
- 笔试题目4 字符串连接函数 char *strcat(char *str1,const char *str2)
- UvaOJ 550 - Multiplying by Rotation
- 将flex生成的swf嵌入到html中,背景如何透明?
- C++序列化以及反序列化-续
- VC菜单快捷键
- 从手写代码开始,慢慢去理解。
- 百万级访问网站前期的技术准备
- 华为机试题(7)
- JavaScript多选框checkbox传递
- 运行地址和加载地址