You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含unsigned long long int的C递推代码转换为Java?

如何将C语言中的unsigned long long数组转换为Java实现?

问题描述

我需要把一段接收命令行整数参数、计算递推关系的C代码转换成Java语言,但不清楚如何改写其中的unsigned long long int gn[3]={0,0,1}, tmp;部分,求实现方案。

原C代码

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
    unsigned long long int gn[3]={0,0,1}, tmp;
    int i, j;
    int n = atoi(argv[1]);
    for(i=3; i<=n; i++){
        tmp = 0;
        for(j=0; j<3; j++){
            tmp += gn[j];
        }
        gn[0] = gn[1];
        gn[1] = gn[2];
        gn[2] = tmp;
    }
    if(n<2){
        printf("%ld\n",gn[n]);
    }else{
        printf("%llu\n",gn[2]);
    }
    return 0;
}

测试结果

  • 输入:1,输出:0
  • 输入:5,输出:4
  • 输入:10,输出:81
  • 输入:30,输出:15902591

解决方案

Java中没有和C语言unsigned long long完全对应的无符号64位整数类型,但可以用**long类型**替代:Java的long是64位有符号整数,取值范围是-9223372036854775808到9223372036854775807,你的测试用例中最大结果15902591远小于上限,完全可以满足需求。

对应原代码中数组和临时变量的改写方式:

  • 数组:用long[] gn = new long[]{0, 0, 1};直接初始化,和C语言的数组定义逻辑一致。
  • 临时变量tmp:定义为long tmp;即可。

以下是完整的Java实现代码:

public class RecursionCalculator {
    public static void main(String[] args) {
        long[] gn = new long[]{0, 0, 1};
        long tmp;
        int i, j;
        int n = Integer.parseInt(args[0]);
        
        for (i = 3; i <= n; i++) {
            tmp = 0;
            for (j = 0; j < 3; j++) {
                tmp += gn[j];
            }
            gn[0] = gn[1];
            gn[1] = gn[2];
            gn[2] = tmp;
        }
        
        if (n < 2) {
            System.out.println(gn[n]);
        } else {
            System.out.println(gn[2]);
        }
    }
}

说明

这段Java代码完全复刻了原C代码的递推逻辑:通过滚动数组保存前三项的值,迭代计算到第n项,最终输出对应结果。运行时只需在命令行传入整数参数即可,比如java RecursionCalculator 30就能得到15902591的输出。

内容的提问来源于stack exchange,提问作者satohh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:09:48