思路 :初始化a為0,b為1;輸出時 :如果分母是1,直接輸出整數部分就可以;如果a>b,說明有整數部分和小數部分;pat上分子和分母數據范圍是long int,相當于是int,而acwing是long long,如果沒有中間那步會溢出,因此分母要變成b和d的最小公倍數,找到b和d的最大公約數,那么分母就是b/最大公約數再*d(原先應該是b *d),分子是…(原先是a * d + b * c),但是分子式子的前半部分是由d/t而不是a/t
語法 :gcd模版;scanf時如果是負數這個符號是在分子上讀入的
#include<iostream>usingnamespace std;typedeflonglong LL;LL gcd(LL a, LL b){return b ?gcd(b, a % b): a;}intmain(){int n;cin >> n;LL a =0, b =1;for(int i =0; i < n; i ++){LL c, d;scanf("%lld/%lld",&c,&d);LL t =gcd(c, d);c /= t, d /= t;t =gcd(b, d);a = d / t * a + b / t * c;b = b / t * d;t =gcd(a, b);a /= t, b /= t;}if(b ==1) cout << a;else{if(a > b)printf("%lld ", a / b), a %= b;printf("%lld/%lld", a, b);}return0;}
#include<iostream>usingnamespace std;typedeflonglong LL;LL gcd(LL a, LL b){return b ?gcd(b, a % b): a;}voidprint(LL a, LL b){LL t =gcd(a, b);a /= t, b /= t;if(b <0) a *=-1, b *=-1;bool is_minus = a <0;if(is_minus) cout <<"(";if(b ==1) cout << a;else{if(abs(a)> b)printf("%lld ", a / b), a =abs(a)% b;printf("%lld/%lld", a , b);}if(is_minus) cout <<")";}voidadd(LL a, LL b, LL c, LL d){print(a, b), cout <<" + ",print(c, d), cout <<" = ";a = a * d + b * c;b = b * d;print(a, b), cout << endl;}voidsub(LL a, LL b, LL c, LL d){print(a, b), cout <<" - ",print(c, d), cout <<" = ";a = a * d - b * c;b = b * d;print(a, b), cout << endl;}voidmul(LL a, LL b, LL c, LL d){print(a, b), cout <<" * ",print(c, d), cout <<" = ";a = a * c;b = b * d;print(a, b), cout << endl;}voiddiv(LL a, LL b, LL c, LL d){print(a, b), cout <<" / ",print(c, d), cout <<" = ";if(!c)puts("Inf");else{a = a * d;b = b * c;print(a, b), cout << endl;}}intmain(){LL a, b, c, d;scanf("%lld/%lld %lld/%lld",&a,&b,&c,&d);add(a, b, c, d);sub(a, b, c, d);mul(a, b, c, d);div(a, b, c, d);return0;}
1096 Consecutive Factors (20 分)
題意 :給一數,求最長連續因子
思路 :先枚舉起始位置,然后枚舉長度;注意有可能只有它本身的情況
語法 :2312^{31}231還是int范圍;一直循環到連續斷了,就直接退出for循環
#include<iostream>#include<vector>usingnamespace std;intmain(){int n;cin >> n;vector<int> res;for(int i =2; i * i <= n; i ++)if(n % i ==0){vector<int> seq;for(int m = n, j = i; m % j ==0; j ++){seq.push_back(j);m /= j;}if(seq.size()> res.size()) res = seq;}if(res.empty()) res.push_back(n);cout << res.size()<< endl;cout << res[0];for(int i =1; i < res.size(); i ++) cout <<"*"<< res[i];return0;}
#include<iostream>usingnamespace std;intmain(){int n;cin >> n;longdouble res =0;for(int i =1; i <= n; i ++){longdouble x;cin >> x;res += x * i *(n - i +1);}printf("%.2Lf", res);return0;}#include<iostream>usingnamespace std;typedeflonglong ll;intmain(){int n;cin >> n;ll res =0;for(int i =1; i <= n; i ++){double x;cin >> x;res +=(ll)(1000* x)* i *(n - i +1);// 乘1000放大數字,避免精度的影響,注意括號}printf("%.2lf", res /1000.0);// 加上.0可以轉化成小數return0;}
#include<iostream>usingnamespace std;constint N =200;int st[N];// 1沒壞,0壞了,2輸出過intmain(){string s;int k;cin >> k >> s;for(int i =0; i < s.size(); i ++){int j = i +1;while(j < s.size()&& s[j]== s[i]) j ++;int len = j -1- i +1;if(len % k) st[s[i]]=1;i = j -1;// 因為還要 ++}string res;for(int i =0; i < s.size(); i ++){if(!st[s[i]]) cout << s[i], st[s[i]]=2;if(st[s[i]]==1) res += s[i];else{res += s[i];i += k -1;}}cout << endl << res << endl;return0;}
#include<iostream>usingnamespace std;constint N =4e4;int primes[N], cnt;bool st[N];voidinit(){for(int i =2; i < N; i ++)if(!st[i]){primes[cnt ++]= i;for(int j = i *2; j < N; j += i)st[j]=true;}}boolcheck(string s){int x =stoi(s);for(int i =0; primes[i]<= x / primes[i]; i ++)if(x % primes[i]==0)returnfalse;returntrue;}intmain(){init();int l, k;string s;cin >> l >> k >> s;for(int i =0; i + k <= l; i ++){string ss = s.substr(i, k);if(check(ss)){cout << ss;return0;}}cout <<404;return0;}