1000
num 1000
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
cout << a+b << endl;
return 0;
}
poj 1001
version:1.0
author:Knight
Email:S.Knight.Work@gmail.com
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<memory.h>
using namespace std;
char Result[200];//存R^N的结果
//大实数的乘法,乘数为FirMultiplier和SecMultiplier,结果存在Result中
void HigRealMul(char* FirMultiplier, char* SecMultiplier, char* Result);
//剔除实数尾部的无效0或小数点
void CutInsignificantTail(char* StrR);
//计算小数点在实数中的位数
int CountPointIndex(char* StrR);
//删除实数中的小数点,PointIndex为小数点在实数中从右向左数的第几位
void DeletePoint(char* StrR, int PointIndex);
int main(void)
{
char StrR[10];//R对应的字符串
int N;
int i;
int PointIndex = 0;//记录小数点在实数中从右向左数的第几位,如数字1.26在第3位,数字4的小数点在第0位
while(scanf("%s%d", StrR, &N) != EOF)
{
memset(Result, 0, 200);
CutInsignificantTail(StrR);
PointIndex = CountPointIndex(StrR);//compute the dot position
DeletePoint(StrR, PointIndex);
strcpy(Result, StrR);
for (i=2; i<=N; i++)
{
HigRealMul(Result, StrR, Result);
}
int Len = strlen(Result);
if (Len -(PointIndex - 1) * N < 0)
{
printf(".");
for (i = Len - (PointIndex - 1) * N; i<0; i++)
{
printf("0");
}
}
for (i=0; i<Len; i++)
{
//输出小数点
if (i == Len -(PointIndex - 1) * N)
{
printf(".");
}
printf("%c", Result[i]);
}
printf("\n");
//printf("%s\n", Result);
//printf("%d\n", PointIndex);
}
return 0;
}
//大实数的乘法,乘数为FirMultiplier和SecMultiplier,结果存在Result中
void HigRealMul(char* FirMultiplier, char* SecMultiplier, char* Result)
{
char TmpResult[200];
int i,j;
int k = -1;//控制TmpResult[]下标
int FirLen = strlen(FirMultiplier);
int SecLen = strlen(SecMultiplier);
memset(TmpResult, '0', 200);
//模拟乘法运算
for (i=SecLen-1; i>=0; i--)
{
k++;
int FirMul;
int SecMul = SecMultiplier[i] - '0';
int Carry;//进位
for (j=FirLen-1; j>=0; j--)
{
FirMul = FirMultiplier[j] - '0';
TmpResult[k + FirLen - 1 - j] += FirMul * SecMul % 10;
Carry = FirMul * SecMul / 10 + (TmpResult[k + FirLen - 1 - j] - '0') / 10;
TmpResult[k + FirLen - 1 - j] = (TmpResult[k + FirLen - 1 - j] - '0') % 10 + '0';
TmpResult[k + FirLen - j] += Carry;
}
}
//防止某一位的值超过9
for (k=0; k<200; k++)
{
TmpResult[k + 1] += (TmpResult[k] - '0') / 10;
TmpResult[k] = (TmpResult[k] - '0') % 10 + '0';
}
//将设置字符串结束符
for (k=199; k>=0; k--)
{
if ('0' != TmpResult[k - 1])
{
TmpResult[k] = '\0';
break;
}
}
//将临时存储的答案TmpResult倒转变成我们熟悉的方式,存到Result中
for (i=strlen(TmpResult)-1,j=0; i>=0; i--,j++)
{
Result[j] = TmpResult[i];
}
Result[j] = '\0';
}
//剔除实数尾部的无效0或小数点
void CutInsignificantTail(char* StrR)
{
int i;
int PointIndex = CountPointIndex(StrR);
int Len = strlen(StrR);
if (0 == PointIndex)
{
if ('.' == StrR[Len - 1])
{
StrR[Len - 1] = '\0';
}
return;
}
for (i=Len-1; i>Len-1-PointIndex; i--)
{
if ('0' == StrR[i] || '.' == StrR[i])
{
StrR[i] = '\0';
}
else
{
return ;
}
}
}
//计算小数点在实数中的位数
int CountPointIndex(char* StrR)
{
int i;
int Index = 0;
for (i = strlen(StrR); i>=0; i--)
{
if ('.' == StrR[i])
{
break;
}
else
{
Index++;
}
}
if (-1 == i)
{
Index = 0;
}
return Index;
}
//删除实数中的小数点
void DeletePoint(char* StrR, int PointIndex)
{
int i;
int Len = strlen(StrR);
for (i=strlen(StrR)-PointIndex; i<Len; i++)
{
StrR[i] = StrR[i+1];
}
}
1002 电话号码的去重和统计
#include<iostream>
#include<string>
#include<stdlib.h>
#include<cstdio>
#include<cstring>
using namespace std;
int numint[110000]={0};
char number[110000][100]={0};
int compare(const void *a, const void *b)
{
return(*(int *)a-*(int *)b);
}
int main()
{
int n=0,i=0,j=0,N=0,point=1000000,d[40]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9},k=0;
cin>>n;
getchar();
for(i=0;i<n;i++)
{
gets(number[i]);
N=strlen(number[i]);
point=1000000;
for(j=0;j<N;j++)
{
if(number[i][j]=='-')
{
continue;
}
if(number[i][j]<='9'&&number[i][j]>='0')
{
numint[i]+=(number[i][j]-'0')*point;
point=point/10;
continue;
}
numint[i]+=d[number[i][j]-'A']*point;
point=point/10;
}
}
qsort(numint,n,sizeof(int),compare);
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(numint[i]!=numint[j])
{
if(j-i>1)
{
printf("%03d-%04d %d\n", numint[i]/10000, numint[i]%10000, j-i);
i=j-1;
k=1;
break;
}
else
{
i=j-1;
break;
}
}
}
if(numint[i]==numint[j-1]&&j==n&&i!=j-1)
{
printf("%03d-%04d %d\n", numint[i]/10000, numint[i]%10000, j-i);
k=1;
break;
}
}
if(!k)
{
cout<<"No duplicates."<<endl;
}
}