zoukankan      html  css  js  c++  java
  • 【高精度】大整数的因子

    题目相关

    【题目描述】

    已知正整数k满足2≤k≤9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。

    【输入】

    一个非负整数c,c的位数≤30。

    【输出】

    若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。

    【输入样例】

    30

    【输出样例】

    2 3 5 6

    分析

    本题考查的高精度除法。求出c除k的余数,余数为0则输出k。并且计算过程中只有被除数是高精度大数,而除数是个整数型的数字。

    for(int k=2;k<=9;k++){
        if(c MOD k ==0){
            cout<<k<<" ";
        }
    }
    

    在过程中我们可以模拟竖式计算的过程来实现。除法计算时,是从高位开始,取出一位位的数字依次和除数相除,有余数,则将余数和下一位数字组成新的数继续相除,直到所有数的用完为止。

    int res=0;//余数
    int newNum=0;//组成的新数
    for(int i=0;i<len;i++){
        newNum=res*10+c[i];
        res=newNum%k;//计算余数
        ans[i]=newNum/k;//计算商
    }
    

    代码实现

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int numMod(char s[],int k){
    	int c[35]={0};
    	int len=strlen(s);
    	for(int i=0;i<len;i++){
    		c[i]=s[i]-'0';
    	}
    	int res=0;
    	int newNum=0;
    	for(int i=0;i<len;i++){
    		newNum=res*10+c[i];
    		res=newNum%k;
    	}
    	return res;
    }
    
    int main(){
    	char C[35]={0};
    	bool flag=false;
    	cin>>C;
    	for(int k=2;k<=9;k++){
    		if(numMod(C,k)==0){
    			flag=true;
    			cout<<k<<" ";
    		}
    	}
    	if(!flag){
    		cout<<"none";
    	}
    	return 0;
    }
    

    视频链接

    链接

    源码

    源码上传至Git仓库中,欢迎star!

    Fork Me on Gitee

    Fork Me on GitHub

    Fork me on Gitee

    不积硅步,无以至千里。
  • 相关阅读:
    Struts2结合Ajax实现登录
    Java读取Properties文件
    职责链模式
    javaScript初学者易错点
    2019 DevOps 必备面试题——DevOps 理念篇
    如何成为一名优秀的敏捷团队负责人
    为什么企业敏捷团队会失败
    伪装的敏捷,我好累
    CODING 告诉你如何建立一个 Scrum 团队
    十倍程序员的传说
  • 原文地址:https://www.cnblogs.com/wyloving/p/14188792.html
Copyright © 2011-2022 走看看