快速幂 大数A+B [Cloned]
专题链接:https://vjudge.net/contest/332762
A-A^B Mod C
原题链接:https://www.51nod.com/Challenge/Problem.html#problemId=1046
代码:
#include <stdio.h>
int ks(long long a,long long b, long long c)
{
long long ans=1;
a=a%c;
while(b>0)
{
if(b%2==1)
{
ans=(ans*a)%c;
}
b=b/2;
a=(a*a)%c;
}
return ans;
}
int main()
{
long long x,y,z;
long long p;
scanf("%lld %lld %lld",&x,&y,&z);
p=ks(x,y,z);
printf("%lld",p);
return 0;
}
B-人见人爱A^B
原题链接:https://vjudge.net/problem/17489/origin
代码:
#include <stdio.h>
int ks(long long a,long long b, long long c)
{
long long ans=1;
a=a%c;
while(b>0)
{
if(b%2==1)
{
ans=(ans*a)%c;
}
b=b/2;
a=(a*a)%c;
}
return ans;
}
int main()
{
long long x,y,i;
while(~scanf("%lld %lld",&x,&y))
{
if(x==0||y==0)
{
break;
}
i=ks(x,y,1000);
printf("%lld\n",i);
}
return 0;
}
C-Easy Summation
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=6027
代码:
#include<stdio.h>
#define X 1000000007
long long ks(long long a,long long b, long long c)
{
long long ans=1;
a=a%c;
while(b>0)
{
if(b%2==1)
{
ans=(ans*a)%c;
}
b=b/2;
a=(a*a)%c;
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
long long a,b,i,sum;
scanf("%lld %lld",&a,&b);
sum=0;
for(i=1;i<=a;i++)
{
sum+=ks(i,b,X);
}
if(sum>X)
{
sum%=X;
}
printf("%lld\n",sum);
}
return 0;
}
D - n^n的末位数字
原题链接:https://www.51nod.com/Challenge/Problem.html#problemId=1004
代码:
#include <stdio.h>
int ks(long long a,long long b, long long c)
{
long long ans=1;
a=a%c;
while(b>0)
{
if(b%2==1)
{
ans=(ans*a)%c;
}
b=b/2;
a=(a*a)%c;
}
return ans;
}
int main()
{
long long N,I;
scanf("%lld",&N);
I=ks(N,N,10);
printf("%lld",I);
return 0;
}
E - A + B Problem II
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002
代码:
#include <stdio.h>
#include <string.h>
int main()
{
char aa[1005];
char bb[1005];
int a[1005];
int b[1005];
int c[1005];
int m,n,i,j,k,len,N,T;
int t=0;
scanf("%d",&N);
T=N;
while(N--)
{
t++;
scanf("%s %s",aa,bb);
m=strlen(aa);
n=strlen(bb);
len=(m>n)?m:n;
for(i=0; i<m; i++)
{
a[i]=aa[i]-'0';
}
for(j=0; j<n; j++)
{
b[j]=bb[j]-'0';
}
for(i=m-1,j=n-1,k=len-1; i>=0&&j>=0; i--,j--,k--)
{
c[k]=a[i]+b[j];
}
for(; i>=0; i--,k--)
c[i]=a[i];
for(; j>=0; j--,k--)
c[j]=b[j];
for(k=len-1; k>0; k--)
{
if(c[k]>9)
{
c[k]=c[k]%10;
c[k-1]+=1;
}
}
printf("Case %d:\n",t);
printf("%s ",aa);
printf("+ ");
printf("%s ",bb);
printf("= ");
for(k=0; k<len; k++)
{
printf("%d",c[k]);
}
printf("\n");
if(T!=t)
printf("\n");
}
return 0;
}
F - 大数加法
原题链接:https://www.51nod.com/Challenge/Problem.html#problemId=1005
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define M 10005
using namespace std;
char s1[M],s2[M];
int num1[M],num2[M];
int main(){
cin >> s1 >> s2;
int len1 = strlen(s1),len2 = strlen(s2);
char ch1 = '+',ch2 = '+';
int flag = 0,i,j = len2,k = len1,x,y = 0;
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
if(s1[0] == '-' || s1[0] == '+'){
ch1 = s1[0];
k = len1-1;
}
if(s2[0] == '-' || s2[0] == '+'){
ch2 = s2[0];
j = len2-1;
}
for(i = len1-1,x = 0;i >= 0 && (s1[i] != '-' && s1[i] != '+') ;i --)
num1[x++] = s1[i] - '0';
for(i = len2-1,x = 0;i >= 0 && (s2[i] != '-' && s2[i] != '+');i --)
num2[x++] = s2[i] - '0';
if(ch1 != ch2){
if(j < k){
for(i = 0; i < k; i ++){
if(num1[i] < num2[i]){
num1[i] += 10;
num1[i+1] --;
}
num1[i] -= num2[i];
}
}
else if(j > k){
for(i = 0; i < j; i ++){
if(num1[i] > num2[i]){
num2[i] += 10;
num2[i+1] --;
}
num1[i] = num2[i] - num1[i];
}
}
else{
for(i = j; i >=0; i --){
if(num1[i] > num2[i]){
flag = 1;
break;
}
else if(num1[i] < num2[i]){
y = 1;
break;
}
}
if(flag){
for(i = 0; i < j; i ++){
if(num1[i] < num2[i]){
num1[i] += 10;
num1[i+1] --;
}
num1[i] -= num2[i];
}
}
else{
for(i = 0; i < j; i ++){
if(num1[i] > num2[i]){
num2[i] += 10;
num2[i+1] --;
}
num1[i] = num2[i] - num1[i];
}
}
}
}
else{
int temp = 0,tmp;
for(i = 0; i < M; i ++){
tmp = num1[i] + num2[i] + temp;
num1[i] = tmp % 10;
temp = tmp / 10;
}
}
if((ch1 == '-' && k > j) || (ch2 == '-' && k < j ) || (ch1 == '-' && ch2 == '-') || (ch1 == '-' && flag) || (ch2 == '-' && y))
printf("-");
flag = 0;
for(i = M; i >= 0; i --){
if(num1[i])
flag = 1;
if(flag)
printf("%d",num1[i]);
}
if(!flag)
printf("0");
putchar('\n');
return 0;
}