AC Dream1069

     这题的加密字符 - (Fibnacci % 26),如果得到的字符小于'a',就等于加密字符 - (Fibnacci % 26)+26

获得题目的函数如下:

void getItem(){
	char s1[]="hjxh dwh v vxxpde,mmo ijzr yfcz hg pbzrxdvgqij rid stl mc zspm vfvuu vb uwu spmwzh.";
	long long a[100];
	a[0]=a[1]=1;
	for(int i=2;i<100;++i) a[i]=a[i-1]+a[i-2];
	int c=0,n=strlen(s1);
	char s2[100]; //题目存放在s2 
	for(int i=0;i<n;++i){
		if(s1[i]==' '||s1[i]==','||s1[i]=='.') s2[i]=s1[i];
		else{
			int b=a[c++]%26;
			if(s1[i]-b<'a') s2[i]=s1[i]+26-b;
			else s2[i]=s1[i]-b;
		}
	}
	s2[n]='\0';
	printf("%s\n",s2);
}

题意:给定一个long long范围内的整数,求各位数的和。

此题坑点:

int   -2147483648~2147483647

long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808

由取值范围可知,不可直接对-9223372036854775808求绝对值,会溢出,可以采取特判,也可以直接当做字符串处理。

AC代码:

#include<cstdio>
#include<cstring>
void getItem(){
	char s1[]="hjxh dwh v vxxpde,mmo ijzr yfcz hg pbzrxdvgqij rid stl mc zspm vfvuu vb uwu spmwzh.";
	long long a[100];
	a[0]=a[1]=1;
	for(int i=2;i<100;++i) a[i]=a[i-1]+a[i-2];
	int c=0,n=strlen(s1);
	char s2[100]; //题目存放在s2 
	for(int i=0;i<n;++i){
		if(s1[i]==' '||s1[i]==','||s1[i]=='.') s2[i]=s1[i];
		else{
			int b=a[c++]%26;
			if(s1[i]-b<'a') s2[i]=s1[i]+26-b;
			else s2[i]=s1[i]-b;
		}
	}
	s2[n]='\0';
	//printf("%s\n",s2);
}

int getSum(char *s){
	int n=strlen(s);
	int i=0;
	if(s[0]=='-') i=1;
	int ans=0;
	for(;i<n;++i){
		ans+=s[i]-'0';
	}
	return ans;
}
int main(){
	//getItem(); //题意:求给定数字各位的和 
	char s[30];
	while(scanf("%s",s)==1){
		printf("%d\n",getSum(s));
	} 
	return 0;
}

如有不当之处欢迎指出!

转载于:https://www.cnblogs.com/flyawayl/p/8305484.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值