题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1314
代码如下:
#include <iostream>
#include <algorithm>
#include <math.h>
#include<iomanip>
#include<string.h>
#include<sstream>
using namespace std;
void max(string &a,string &b)
{
string t;
if(a<b)
{
t=a;
a=b;
b=t;
}
}
string Plus(string str1,string str2) ////大数加法
{
string ans;
int len1=str1.size();
int len2=str2.size();
if(len1<len2){
for(int i=1;i<=len2-len1;i++){
str1="0"+str1;
}
}else {
for(int i=1;i<=len1-len2;i++){
str2="0"+str2;
}
}
int len=max(len1,len2);
int carry=0;
for(int i=len-1;i>=0;i--){
int tmp=str1[i]-'0'+str2[i]-'0'+carry;
carry=tmp/10;
tmp%=10;
ans=char(tmp+'0')+ans;
}
if(carry) ans=char(carry+'0')+ans;
return ans;
}
string Sub(string a,string b) /////////大数减法
{
string sub;
int i,a1,b1;
int a_len=a.size();
int b_len=b.size();
if(a_len>=b_len)
{
for(i=0;i<a_len-b_len;i++)
{
b='0'+b;
}
}
else
{
for(i=0;i<b_len-a_len;i++)
{
a='0'+a;
}
}
max(a,b);
for(i=a_len-1;i>=0;i--)
{
a1=a[i]-'0';
b1=b[i]-'0';
if(a1-b1<0)
{
a[i-1]=a[i-1]-'0'-1+'0';
sub=char(a1+10-b1+'0')+sub;
}
else
{
sub=char(a1-b1+'0')+sub;
}
}
sub.erase(0,sub.find_first_not_of('0'));
if(sub.empty()) sub="0";
return sub;
}
string mul(string str1,string str2) ////大数乘法
{
string ans;
int len1=str1.length();
int len2=str2.length();
for(int i=len2-1;i>=0;i--){
string tmpstr="";
int data=str2[i]-'0';
int carry=0;
if(data!=0){
for(int j=1;j<=len2-1-i;j++){
tmpstr+="0";
}
for(int j=len1-1;j>=0;j--){
int t=data*(str1[j]-'0')+carry;
carry=t/10;
t%=10;
tmpstr=char(t+'0')+tmpstr;
}
if(carry!=0) tmpstr=char(carry+'0')+tmpstr;
}
ans=Plus(ans,tmpstr);
}
ans.erase(0,ans.find_first_not_of('0'));
if(ans.empty()) ans="0";
return ans;
}
string chu(string a,int n) ///大数除法
{
string t;
int i,m,yushu=0;
for(i=0;i<a.size();i++)
{
m=(yushu*10+a[i]-'0')/n;
yushu=(yushu*10+a[i]-'0')%n;
t=t+char(m+'0');
}
t.erase(0,t.find_first_not_of('0'));
if(t.empty()) t="0";
return t;
}
int mod(string a, int b) ///大数取模
{
int i,m,n=0;
for(i=0;i<a.size();i++)
{
m=(n*10+a[i]-'0')/b;
n=(n*10+a[i]-'0')%b;
}
return n;
}
string change(int n)
{
string s;
stringstream ss;
ss<<n;
ss>>s;
return s;
}
int change(string n)
{
int a;
stringstream aa;
aa<<n;
aa>>a;
return a;
}
string mi(int a,int b)
{
int i,j;
string t;
t='1'+t;
for(i=0;i<b;i++)
{
string k;
int m=0,n=0;
for(j=t.size()-1;j>=0;j--)
{
m=(int)(t[j]-'0')*a+n;
k=char(m%10+'0')+k;
n=m/10;
}
if(n>0)
{
k=char(n+'0')+k;
}
t=k;
}
return t;
}
int main(){
string s;
int i;
while(cin>>s,s[0]!='*')
{
if('a'<=s[0]&&s[0]<='z')
{
string num=change(s[0]-'a'+1);
for( i=1;i<s.size();i++)
{
num=Plus(mul(num,change(26)),change(s[i]-'a'+1));
}
cout<<s;
for( i=s.size()+1;i<23;i++)cout<<' ';
int k=num.size()%3;
for( i=0;i<num.size();i++)
{
if((num.size()-i)%3==0&&i!=0) cout<<","<<num[i];
else cout<<num[i];
}
cout<<endl;
}
else
{
string num;
int n;
string s1=s;
for(;change(s)>26;)
{
n=mod(s,26);
num=char(n+'a'-1)+num;
s=chu(s,26);
}
n=change(s);
num=char(n+'a'-1)+num;
cout<<num;
for(i=num.size()+1;i<23;i++) cout<<' ';
for(i=0;i<s1.size();i++)
{
if((s1.size()-i)%3==0&&i!=0) cout<<","<<s1[i];
else cout<<s1[i];
}
cout<<endl;
}
}
return 0;
}