大家都知道约瑟夫环吧?现在这里有 n 个数围成的环,从第一个人开始喊 1 每个喊到 n−1的人要出去,下一个人要从 1开始喊。现在我想知道第一个出去的人的编号是多少。
输入格式:
第一行一个数 n 表示有n个人 (1<=n<=1e100)
输出格式:
一个数,表示最先出去的人的编号
输入样例:
在这里给出一组输入。例如:
5
输出样例:
在这里给出相应的输出。例如:
4
老师在作业上的一道pta题,还没学数据结构,不过这道题考法应该是极大数输入输出,看了别人的思路自己做出来了,提供一下自己的做法
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int main(){
char a[100010],b[100010];
cin>>a;
b[0]='1';
int c[100010],d[100010],h[100010],n1,n2,i,f=0,l=0;
n1=strlen(a);
n2=1;
for(i=0;i<n1/2;i++) swap(a[i],a[n1-1-i]);
for(i=0;i<n2/2;i++) swap(b[i],b[n2-1-i]);
for(i=0;i<n1;i++) c[i]=a[i]-'0';
for(i=0;i<n2;i++) d[i]=b[i]-'0';
if(n1>n2) swap(n1,n2);
for(i=0;i<n2;i++) h[i]=c[i]-d[i];
for(i=0;i<n2;i++)
{
if(h[i]<0)
{
h[i]=10+h[i];
h[i+1]--;
}
}
if(f==1) cout<<"-";
for(i=n2-1;i>=0;i--)
{
if(l==0)
{
if(h[i]!=0)
{
l=1;
cout<<h[i];
continue;
}
}
if(l!=0)
{
cout<<h[i];
}
}
return 0;
}