ural 1104. Don’t Ask Woman about Her Age
2011-05-18 23:08
375 查看
给你一个未知进制表示的数(小于等于36进制,长度最长100W),求一个进制,使得这个进制的这个数可以整除进制-1.
比如样例,22进制的A1A可以整除21.
我没多想,直接拿大数做了。。。只需要判断是否能整除,所以还是好写的,不过以前只写过除2的,其实都一样~~~
后来btw说他的方法了,因为这个数等于 b*x+a,所以它模(b-1)就是(x+a)%b。。。自己想下就好了。。。T T。。
不过写出来大数多进制除法还是蛮好的~
比如样例,22进制的A1A可以整除21.
我没多想,直接拿大数做了。。。只需要判断是否能整除,所以还是好写的,不过以前只写过除2的,其实都一样~~~
后来btw说他的方法了,因为这个数等于 b*x+a,所以它模(b-1)就是(x+a)%b。。。自己想下就好了。。。T T。。
不过写出来大数多进制除法还是蛮好的~
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <algorithm> #include <math.h> using namespace std; const int MAX = 1000010; int a[MAX],len; char str[MAX]; bool div(int *a,int base,int d) { int tmp = 0; for(int i=0; i<len; i++) { tmp *= base; tmp += a[i]; if( tmp >= d ) tmp = tmp - (tmp / d) * d; } return tmp == 0 ; } int solve() { int beg = 0; for(int i=0; i<len; i++) if( a[i] > beg ) beg = a[i]; if( beg <= 1 ) return 2; for(int i=beg+1; i<=36; i++) if( div(a,i,i-1) ) return i; return -1; } int main() { scanf("%s",str); len = strlen(str); for(int i=0; i<len; i++) if( isdigit(str[i]) ) a[i] = str[i] - '0'; else a[i] = str[i] - 'A' + 10; int ans = solve(); if( ans == -1 ) printf("No solution./n"); else printf("%d/n",ans); return 0; }
相关文章推荐
- ural 1104. Don’t Ask Woman about Her Age暴力
- ural 1104 Don’t Ask Woman about Her Age
- URAL 1104 Don’t Ask Woman about Her Age(数论)
- Ural 1104. Don’t Ask Woman about Her Age
- ural 1104. Don’t Ask Woman about Her Age
- 1104. Don’t Ask Woman about Her Age(数论)
- Timus 1104 Don’t Ask Woman about Her Age
- Timus 1104. Don’t Ask Woman about Her Age
- Don’t Ask Woman about Her Age
- URAL1993-This cheeseburger you don't need
- URAL 1993-This cheeseburger you don't need (模拟)
- [职业规划]年龄的重要性 Silicon Valley’s Dark Secret: It’s All About Age
- dream about her again
- 转 命令,不要去询问(Tell, Don’t Ask)
- ural 1993 This cheeseburger you don't need
- Moncler Herre woman but these types
- Ural 1993 This cheeseburger you don't need
- They don't care about us中文歌词
- 命令,不要去询问(Tell, Don’t Ask)
- OO设计应该遵循“Tell, don't ask”原则