1.问题描述 2.问题分析 3.算法设计 4.求给定数的位数 5.分离给定数中的最后几位 6.确定程序框架 7.完整的程序 1.问题描述  5 2 = 25 , 2 5 2 = 625 , 7 6 2 = 5776 , 937 6 2 = 87909376 5^2=25,25^2=625,76^2=5776,9376^2=87909376  5 2 = 25 , 2 5 2 = 625 , 7 6 2 = 5776 , 937 6 2 = 87909376 2.问题分析 3.算法设计 采用“求出一个数的平方后再截取最后相应位数”的方法显然是不可取的,因为计算机无法表示过大的整数。
 
·第一个部分积中:被乘数最后三位×乘数的倒数第一位。·第二个部分积中:被乘数最后两位×乘数的倒数第二位。·第三个部分积中:被乘数最后一位×乘数的倒数第三位。将以上部分积的后三位求和后截取后三位就是三位数乘积的后三位。这样的规律可以推广到同样问题的不同位数乘积。4.求给定数的位数 if  __name__== "__main__" : print ( "请输入一个正整数n:" ,  end= "" ) n =  int ( input ( ) ) if  n <= 0 : print ( "输出错误" ) exit( ) count =  0                                        while  n !=  0 : n =  n //  10 count +=  1 print ( " %d 位数"  % count) mul =  number
k =  1 
while  ( mul //  10 )  >  0 :                        mul //=  10 k *=  10 
5.分离给定数中的最后几位 while  k >  0 : mul =  ( mul +  ( number %  ( k *  10 ) ) * ( number %  b -  number %  ( b //   10 ) ) ) % ak //=  10                                 b *=  10 
6.确定程序框架 
 
7.完整的程序 % % time
if  __name__== "__main__" : print ( "100000以内的自守数:" ) for  number in  range ( 0 ,  100000 ) : mul =  numberk =  1 while  ( mul //  10 )  >  0 :    mul //=  10 k *=  10 a =  k *  10   mul =  0  b =  10   while  k >  0 : mul =  ( mul +  ( number %  ( k *  10 ) ) * ( number %  b -  number %  ( b //   10 ) ) ) % ak //=  10   b *=  10 if  number ==  mul:   print ( "%ld "  % number,  end= "\t" ) print ( '\n' ) 100000以内的自守数:
0 	1 	5 	6 	25 	76 	376 	625 	9376 	90625 	CPU times: user 536 ms, sys: 2.14 ms, total: 539 ms
Wall time: 535 ms