大数加法
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string a, b, ans;
int main() {
cin >> a >> b;
int aa = a.length();
int bb = b.length();
int ss = min(aa, bb);
int ll = max(aa, bb);
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
for (int i = 0; i < ss; i++) {
ans += a[i] + b[i] - '0';
}
if (aa < bb) {
for (int i = ss; i < ll; i++) {
ans += b[i];
}
} else if (aa > bb) {
for (int i = ss; i < ll; i++) {
ans += a[i];
}
}
ans += '0';
for (int i = 0; i < ll + 1; i++) {
if (ans[i] > '9') {
ans[i + 1]++;
ans[i] -= 10;
}
}
reverse(ans.begin(), ans.end());
for (int i = ans.find_first_not_of('0'); i < ll + 1; i++) {
if (i == -1) {
cout << 0;
return 0;
}
cout << ans[i];
}
return 0;
}
约瑟夫环
问题描述
有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王。请设计一个程序求出猴子出列的顺序。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m; scanf("%d%d",&n,&m);
queue<int> q;
for(int i=1;i<=n;i++){
q.push(i);
}
for(int i=1;q.size()!=1;i=(i+1)%m)
{
if(i!=0) q.push(q.front());
if(i==0){
printf("%d ",q.front());
}
q.pop();
}
printf("%d",q.front());
return 0;
}