首页 > 学院 > 开发设计 > 正文

蓝桥杯 - 算法训练 阿尔法乘积 C语言实现

2019-11-06 06:52:31
字体:
来源:转载
供稿:网友
算法训练 阿尔法乘积题目:问题描述  计算一个整数的阿尔法乘积。对于一个整数x来说,它的阿尔法乘积是这样来计算的:如果x是一个个位数,那么它的阿尔法乘积就是它本身;否则的话,x的阿尔法乘积就等于它的各位非0的数字相乘所得到的那个整数的阿尔法乘积。例如:4018224312的阿尔法乘积等于8,它是按照以下的步骤来计算的:  4018224312 → 4*1*8*2*2*4*3*1*2 → 3072 → 3*7*2 → 42 → 4*2 → 8  编写一个程序,输入一个正整数(该整数不会超过6,000,000),输出它的阿尔法乘积。  输入格式:输入只有一行,即一个正整数。  输出格式:输出相应的阿尔法乘积。  输入输出样例样例输入4018224312样例输出8分析:首先数据规模并不大,可以看出n的值可能是long long 类型,注意的是喜欢用itoa();的需要注意它不处理long long 的。代码在此:
#include<stdio.h>#include<stdlib.h>#include<math.h>int t = 0;int getLen (long long n) {//求长整形长度		int len = 1;		int temp = 1;	while(n/temp/10 != 0){		temp *= 10;		len ++;	}		return len;}char * getChar (long long n) {	//返回的是对应位数的数字的字符-48的字符串 		int len;	char *ch,*head;	int i;		len = getLen(n);		ch = (char*)malloc(sizeof(char)*len+1);	head = ch;	for(i = 0; i < len; i ++){		*ch = n/(long long)pow(10,len-i-1)%10;	//如果要产生对于数字的字符需要加上48 		ch ++;	}		return head;}void fun (long long n) {	if(n/10 == 0){	//个位时跳出 		PRintf("%lld",n%10);		exit(0);	//程序提前结束,可以节约时间 	}		char *str,*head;	int len;	int i;	long long s = 1;	 	head = getChar(n);	len = getLen(n);/*	str = head;	for(i = 0; i < len; i ++){		printf("%d",*str);		str ++;	}*/	str = head;	for(i = 0; i < len; i ++){		if(str[i] != 0){			s *= (str[i]);		}	}		fun(s);	//递归下一位 }int main () {		long long n;		scanf("%d", &n);	fun(n);		return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表