快速冪 大數A+B [Cloned]

快速冪 大數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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章