VB6做多线程比较麻烦,没有.net容易,不建议.
另外,用三层循环....这个不提倡,一般没必要的话最多带清腔2层
另外,用字符串连接是很慢的
另外,字符串比较也是很慢的
总之,一句话,你的算法要正磨不得.........
你可以尝试数组单循环.
使用ASCII 码判断
dim A (2) as byte
A(0)=48
A(1)=48
A(2)=48
'赋值,ASCII码 48就是0
现在数组就代表000
下面的做个过程
然后从A(2)加1,加到9之后设置为"A" ASCII码65,再累加,超过Z就将A(1)加1
至于比蠢衫较结果的,按位比较就行
随便说说,反正你已经结贴了.........
楼上的好像有点问题,是输出的问题(前面有太多的0了啊),我用的是C语言:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAX(a,b) ((a>b)?a:b)
#define N 60 //可以用来相乘的数的位数
main()
{
/*str1[N]为第一个乘数,str2[N]为第二个乘数,str3[2*N]为结果的保留字符数组,为最大相乘数的两橡漏历倍宽度*/
char str1[N],str2[N],str3[2*N]
/*******
num用来控制每位数字的相乘结果,
next=0保留进位的多少数,
i,j对字符数组进行遍历.
now原来字符与NUM中的个位相加的结果,result控制结果中的位数,
down=1用法看后面,
result_num用来表示结果的最后一位,用来加上'\0'结束符
******/
int num,next=0,i,j,now,result,down=1,result_num
/*读入梁搜两个乘数*/
printf("Please insert your num1:")
gets(str1)
printf("Please insert your num2:")
gets(str2)
/*把结果字搜盯符数组初始化为每个都是'0'字符*/
for(i=0i<N+1i++)
str3[i]='0'
str3[i]='\0'//结束符
result=2*MAX(strlen(str1),strlen(str2))//得到结果字符数组的长度
/*循环计算每一位的值*/
for(i=strlen(str1)-1i>=0i--)
{
if(strlen(str2)>1)
{
next=0//进位为0
result=2*MAX(strlen(str1),strlen(str2))-down
down++//当用str1的个位去乘str2时,从个位开始,当str1的十位去乘str2时,从十位开始算起,依此类推
}
for(j=strlen(str2)-1j>=0j--)
{
num=(str2[j]-'0')*(str1[i]-'0')
now=(str3[result]-'0')+num%10+next
next=num/10
str3[result]=(now%10)+'0'
if(now>9)
next+=now/10
result--
}
str3[result]=next+'0'
}
result_num=2*MAX(strlen(str1),strlen(str2))
str3[2*MAX(strlen(str1),strlen(str2))+1]='\0'//
/*去掉开始时有的0值*/
i=0
while(str3[i]=='0')
i++
/*输出结果*/
if(strlen(str2)==1)
while(i<=result_num)
printf("%c",str3[i++])
else
while(i<result_num)
printf("%c",str3[i++])
printf("\n")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)