题意:给你一个大数 ,问你求小于这个数一半且与他互质的数。
解题思路:奇数直接是二分之一,偶数小于它一半的那个最大奇数。
解题代码:
1 // File Name: a.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月21日 星期六 23时08分24秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 using namespace std; 26 char str[2005]; 27 int num[2005]; 28 int len ; 29 void solve() 30 { 31 for(int i = 0 ;i <= len; i++) 32 num[i] = str[i] - ‘0‘; 33 for(int i = 0 ;i <= len/2 ;i ++ ) 34 { 35 swap(num[i],num[len-i]); 36 } 37 } 38 void chu(){ 39 int tmp = 0 ; 40 for(int i= len ;i >= 0; i --) 41 { 42 int k = (tmp * 10 + num[i]); 43 num[i] = k /2; 44 tmp = k % 2; 45 } 46 if(num[len] == 0 ) 47 len -- ; 48 } 49 void jian(){ 50 for(int i = 0 ;i <= len ;i ++) 51 { 52 if(num[i] == 0 ) 53 num[i] = 9; 54 else{num[i] -- ; 55 break; 56 } 57 } 58 if(num[len] == 0) 59 len -- ; 60 } 61 void print() 62 { 63 for(int i = len; i >= 0 ;i --) 64 { 65 printf("%d",num[i]); 66 } 67 printf("\n"); 68 } 69 int main(){ 70 freopen("china.in","r",stdin); 71 freopen("china.out","w",stdout); 72 scanf("%s",str); 73 len = strlen(str); 74 len-- ; 75 solve(); 76 if(num[0] % 2 == 1) 77 { 78 chu(); 79 print(); 80 return 0 ; 81 } 82 chu(); 83 jian(); 84 while(num[0]%2 == 0) 85 jian(); 86 print(); 87 return 0; 88 }
AS1 A Chinese Girls' Amusement
时间: 2024-10-11 06:55:49